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 1Jeś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