Jak zmienić nazwę wszystkich plików w katalogu, rekurencyjnie, zmieniając jedno rozszerzenie pliku na inne, dla tysięcy plików w tysiącach podfolderów? Widzę wiele poleceń, które robią prawie to, czego chcę, ale niezupełnie.
find . -name "*.andnav" -exec rename .andnav .tile {} \;
syntax error at (eval 1) line 1, near "."
...
rename -nv 's/\.andnav$/\.tile/i' *.andnav
0.png.andnav renamed as 0.png.tile
linux
command-line
file-management
rename
endolit
źródło
źródło
rename
lub Red Hatrename
?Odpowiedzi:
Domyśliłam się
oczywiście usuń -v podczas robienia tego, inaczej zmarnuje czas na wyświetlanie wszystkich plików
źródło
Coś jak:
źródło
Z zsh:
Usuń,
-n
aby faktycznie zmienić nazwę.źródło
Odkryłem, że ta metoda jest łatwiejsza do odczytania:
Przynajmniej w przypadku pochodnych Ubuntu zmiana nazwy pobiera listę plików ze STDIN, jeśli nie ma ich w wierszu poleceń. Można to łatwo przetestować za pomocą:
dopóki nie zrobisz tego dobrze.
źródło
Zmień nazwy plików i katalogów za pomocą
find -execdir | rename
Jeśli zamierzasz zmienić nazwę zarówno plików, jak i katalogów, nie tylko za pomocą przyrostka, to jest to dobry wzorzec:
Niesamowita
-execdir
opcja robicd
w katalogu a przed wykonaniemrename
polecenia, w przeciwieństwie do-exec
.-depth
upewnij się, że zmiana nazwy nastąpi najpierw dla dzieci, a następnie dla rodziców, aby zapobiec potencjalnym problemom z brakującymi katalogami rodziców.-execdir
jest wymagane, ponieważ zmiana nazwy nie działa dobrze w przypadku ścieżek wejściowych innych niż basename, np. nie działa:PATH
Hacking jest wymagane, ponieważ-execdir
ma jeden bardzo przykry wadę:find
jest bardzo uparty i nie chce nic robić ze-execdir
jeśli masz żadnych ścieżek względnych wPATH
zmiennej środowiskowej, na przykład./node_modules/.bin
, w przypadku braku z:Zobacz także: /ubuntu/621132/why-using-the-execdir-action-is-insecure-for-directory-which-is-in-the-path/1109378#1109378
-execdir
to rozszerzenie GNU do POSIX .rename
jest oparty na Perlu i pochodzi zrename
pakietu. Testowane w Ubuntu 18.10.Zmień nazwę obejścia obejścia
Jeśli twoje ścieżki wejściowe nie pochodzą
find
lub jeśli masz dość relatywnej irytacji ścieżki, możemy użyć Perla lookahead, aby bezpiecznie zmienić nazwy katalogów jak w:Nie znalazłem dogodnym dla analogowych
-execdir
zxargs
: xargs: Zmiana katalogu roboczego do ścieżki pliku przed wykonaniem?Jest
sort -r
to konieczne, aby upewnić się, że pliki następują po odpowiednich katalogach, ponieważ dłuższe ścieżki pojawiają się po krótszych z tym samym prefiksem.źródło