/ / Rekursywnie zmień rozszerzenia plików w Bash [duplicate] - linux, bash, shell, sh

Rekurencyjnie zmieniaj rozszerzenia plików w Bash [duplicate] - linux, bash, shell, sh

Chcę rekursywnie przeglądać katalog i zmieniać rozszerzenie wszystkich plików określonego rozszerzenia .t1 do .t2. Do czego służy polecenie bash?

Odpowiedzi:

115 dla odpowiedzi nr 1

Jeśli masz zmienioną nazwę, użyj:

find . -name "*.t1" -exec rename "s/.t1$/.t2/" "{}" ;

Jeśli zmiana nazwy nie jest dostępna, użyj:

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

7 dla odpowiedzi nr 2

Jeśli twoja wersja bash obsługuje globstar opcja (wersja 4 lub nowsza):

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

5 dla odpowiedzi nr 3

Lub po prostu zainstaluj mmv polecenie i wykonaj:

mmv "*.t1" "#1.t2"

Tutaj #1 jest pierwszą globalną częścią tj. * w *.t1 .

Lub w czystej rzeczy bash, prosty sposób będzie:

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

(to znaczy.: for może wyświetlać pliki bez pomocy zewnętrznego polecenia, takiego jak ls lub find)

HTH


2 dla odpowiedzi № 4

Robiłbym tak w bash:

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

EDYTOWAĆ : mój błąd: nie jest rekursywny, oto moja metoda rekurencyjnego zmieniania nazwy pliku:

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