Qui si va, questo scorre tutti i file (e cartelle) nella directory corrente:
for oldname in *
do
newname=`echo $oldname | sed -e 's/ /_/g'`
mv "$oldname" "$newname"
done
Noti prego che questo sarà sovrascrivere i file con lo stesso nome. Cioè, se ci sono due file che hanno nomi di file altrimenti identici, ma uno ha underscore (s) dove l'altro ha spazio (s). In quella situazione, quello che aveva underscore sarà sovrascritto con quello che aveva spazi. Questa versione più lunga salterà invece questi casi:
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
fonte
2014-11-18 10:20:59
Qual è la funzione delle virgolette nel comando mv? Quella linea equivale a mv $ (oldname) $ (newname)? –
Senza le doppie virgolette, i nomi di file con spazi causerebbero problemi. E no, non equivalente. La sintassi '$()' è per la sostituzione di comando: https://en.wikipedia.org/wiki/Command_substitution –
ghhhaaaa Voglio farlo in modo ricorsivo e colpire anche tutti i sottodir ... –