Proszę, to pętle przez wszystkie pliki (i foldery) w bieżącym katalogu:
for oldname in *
do
newname=`echo $oldname | sed -e 's/ /_/g'`
mv "$oldname" "$newname"
done
Proszę pamiętać, że będzie nadpisanie plików o tej samej nazwie. Oznacza to, że jeśli istnieją dwa pliki, które mają identyczne nazwy plików, ale jeden ma podkreślenia, gdzie drugi ma spacje. W tej sytuacji ten, który miał podkreślenia, zostanie nadpisany tym, który miał spacje. Ta dłuższa wersja pominie te przypadki:
for oldname in *
do
newname=`echo $oldname | sed -e 's/ /_/g'`
if [ "$newname" = "$oldname" ]
then
continue
fi
if [ -e "$newname" ]
then
echo Skipping "$oldname", because "$newname" exists
else
mv "$oldname" "$newname"
fi
done
Jaka jest funkcja podwójnych cudzysłowów w poleceniu mv? Czy ta linia jest odpowiednikiem mv $ (oldname) $ (newname)? –
Bez podwójnych cudzysłowów nazwy plików ze spacjami mogą powodować problemy. I nie, nie równoważne. Składnia '$()' służy do podstawiania komend: https://en.wikipedia.org/wiki/Command_substitution –
ghhhaaaa Chcę to zrobić rekurencyjnie i trafić również wszystkie podkatalogi ... –