GNU/Linux >> Linux Esercitazione >  >> Linux

Modifica ricorsivamente le estensioni dei file in Bash

Nessuna delle soluzioni suggerite ha funzionato per me su una nuova installazione di Debian 14. Dovrebbe funzionare su qualsiasi Posix/MacOS

find ./ -depth -name "*.t1" -exec sh -c 'mv "$1" "${1%.t1}.t2"' _ {} \;

Tutti i crediti a:https://askubuntu.com/questions/35922/how-do-i-change-extension-of-multiple-files-recursively-from-the-command-line


Se la tua versione di bash supporta il globstar opzione (versione 4 o successiva):

shopt -s globstar
for f in **/*.t1; do
    mv "$f" "${f%.t1}.t2"
done 

Usa:

find . -name "*.t1" -exec bash -c 'mv "$1" "${1%.t1}".t2' - '{}' +

Se hai rename disponibile allora usa uno di questi:

find . -name '*.t1' -exec rename .t1 .t2 {} +
find . -name "*.t1" -exec rename 's/\.t1$/.t2/' '{}' +

Farei così in bash :

for i in $(ls *.t1); 
do
    mv "$i" "${i%.t1}.t2" 
done

EDIT:il mio errore:non è ricorsivo, ecco il mio modo per cambiare in modo ricorsivo il nome del file:

for i in $(find `pwd` -name "*.t1"); 
do 
    mv "$i" "${i%.t1}.t2"
done

Linux
  1. Come trovare un file in Linux in tutte le directory in modo ricorsivo

  2. Il Bash '?

  3. Trova il file di registro di Firefox?

  4. Linux:rimuovi le estensioni di file per più file

  5. bash trova le directory

Comando sorgente Bash

Bash:aggiungi al file

35 Esempi di script Bash

Come modificare automaticamente lo sfondo di GNOME a intervalli utilizzando BASH

Come escludere un'estensione di file specifica durante la copia ricorsiva di file

Come trovare file con dozzine di criteri con il comando Trova Bash