Prova questo:
$ find TopFolder -print
Topfolder
Topfolder/Folder1
Topfolder/Folder1/Folder11.ext
Topfolder/Folder1/Folder11.ext/Folder111
Topfolder/Folder2.ext
$ find TopFolder -name '*.ext' -print | while read i; do mv -v "$i" "${i%.ext}";done
$ find TopFolder
TopFolder
TopFolder/Folder1
TopFolder/Folder1/Folder11
TopFolder/Folder1/Folder11/Folder111
TopFolder/Folder2
La prima e l'ultima scoperta servono solo per mostrare la gerarchia precedente e successiva. Ecco come funziona il middle find, quello che fa il lavoro vero, funziona:
$ find TopFolder -name '*.ext' -print
Questo trova tutto in TopFolder che corrisponde allo schema '*.ext'
, cioè a tutti i file e le directory che terminano in .ext, e stampa il percorso per ognuno. Se vuoi limitare solo le directory, aggiungi -type d
.
while read i; do
read i
legge dallo standard input nella variabile di shell i
. while
cicli fino a quando read i
restituisce false, cosa che fa su end-of-file. Essendo l'output di find
in fase di piping, l'output standard di read
è l'output di find
, quindi read
leggerà una riga alla volta dall'output find
finché non ce n'è nessuna sinistra.
mv -v "$i" "${i%.ext}"
Questo è il vero nome. Il -v
è lì solo così puoi vedere cosa sta succedendo, puoi lasciarlo fuori se lo desideri. "$i"
è l'origine, quotata nel caso in cui qualsiasi elemento del percorso in $i
contenga spazi. "${i%.ext}"
è la destinazione, che è $i
, con qualsiasi percentuale finale rimossa.ext
.
done
Questo termina semplicemente il ciclo while.
Nota che questo è in bash, dovrebbe essere fattibile in altre shell abbastanza moderne, ma la sintassi potrebbe essere leggermente diversa.