Come si rinominano tutti i file/sottodirectory nella cartella corrente?
Diciamo che ho molti file e sottodirectory con spazi e voglio sostituire tutti gli spazi con un trattino basso.
File 1
File 2
File 3
Dir 1
Dir 3
dovrebbe essere rinominato in
File_1
File_2
File_3
Dir_1
Dir_3
Risposta accettata:
Se hai bisogno di rinominare anche i file nelle sottodirectory e il tuo find
supporta -execdir
predicato, allora puoi farlo
find /search/path -depth -name '* *'
-execdir bash -c 'mv -- "$1" "${1// /_}"' bash {} ;
Grazie a @glenn jackman per aver suggerito -depth
opzione per find
e per farmi pensare.
Nota che su alcuni sistemi (inclusi quelli GNU/Linux), find
potrebbe non riuscire a trovare file il cui nome contiene spazi e anche sequenze di byte che non formano caratteri validi (tipico con file multimediali con nomi con caratteri non ASCII codificati in un set di caratteri diverso da quello della locale). Impostazione della locale su C
(come in LC_ALL=C find...
) risolverebbe il problema.