GNU/Linux >> Znalost Linux >  >> Linux

Rekurzivně měnit přípony souborů v Bash

Žádné z navrhovaných řešení mi nefungovalo na čerstvé instalaci debianu 14. To by mělo fungovat na jakémkoli Posix/MacOS

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

Všechny kredity na:https://askubuntu.com/questions/35922/how-do-i-change-extension-of-multiple-files-recursively-from-the-command-line


Pokud je vaše verze bash podporuje globstar možnost (verze 4 nebo novější):

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

Použijte:

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

Pokud máte rename k dispozici, pak použijte jeden z těchto:

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

V bash bych to udělal takto:

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

EDIT:moje chyba:není to rekurzivní, tady je můj způsob, jak rekurzivně změnit název souboru:

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

Linux
  1. Bash:Bezpečné procedurální použití funkce Najít do výběru?

  2. Najít soubor protokolu Firefoxu?

  3. Jak změnit oprávnění pro určitý vzor souboru/příponu?

  1. The Bash ‘?

  2. bash najít adresáře

  3. Linux najde názvy souborů s daným řetězcem rekurzivně

  1. Najít největší soubory rekurzivně?

  2. najít a zkopírovat soubor pomocí Bash

  3. Linux:Odeberte přípony souborů pro více souborů