Mam kilka katalogów i podkatalogów zawierających pliki bez rozszerzenia. Chcę dodać .jpg
do wszystkich plików zawartych w tych katalogach. Widziałem skrypty bash do zmiany rozszerzenia pliku, ale nie tylko do dodania jednego. Musi też być rekurencyjna, czy ktoś może mi pomóc?
bash
file
shell
command-line
file-extension
robjmills
źródło
źródło
for
pętli denerwującej bash, aby iterować po liście plików, to nie jest poprawne.for
Pętla bash iteracyjnie wydaje każdemv
polecenie.find
najpierw tworzy listę plików przed wykonaniem-exec
instrukcji? Chyba tak, ale chcę wyjaśnić ten punkt przed zakodowaniem nieskończonych pętli.-not -name "*.*"
wystarczy.to znajdzie pliki bez rozszerzenia i doda twój .jpg
źródło
Trochę za późno, ale pomyślałem, że dodam, że lepszym rozwiązaniem (choć może mniej czytelnym) od dotychczasowych mogłoby być:
Użycie
find | xargs
wzorca generalnie skutkuje bardziej wydajnym wykonaniem, ponieważ nie trzeba rozwidlać nowego procesu dla każdego pliku.Zauważ, że wymaga to wersji zmiany nazwy, którą można znaleźć w dystrybucjach o smaku Debiana (zwanej również prename), a nie tradycyjnej zmiany nazwy. Jest to jednak tylko mały skrypt w Perlu, więc byłoby dość łatwo użyć powyższego polecenia w dowolnym systemie.
źródło
lubię to,
Nie spodziewam się, że będziesz mieć nazwy plików oddzielone spacjami.
Jeśli to zrobisz, nazwy będą musiały zostać nieco przetworzone.
Jeśli chcesz, aby wykonać polecenie z jakiegoś innego katalogu,
można wymienić
find .
zfind /target/directory
.źródło
-type
.Aby zmienić nazwę wszystkich plików bez rozszerzenia w systemie Windows Basic, możesz to zrobić
ren * *.jpg
Ponieważ plik nie ma rozszerzenia, po prostu użyj *, lub jeśli chcesz zmienić png na jpg użyjren *.png *.jpg
źródło
rename
nie jestem pewien, czy może zmienić nazwy plików bez rozszerzeń (jestem teraz w systemie Windows 7)
źródło
rename
, jeden program w C zawarty w util-linux-ng i jeden program w Perlu (autorstwa samego Wall'a) na komputerach Debiana naszego uniwersytetu. W rzeczywistości żaden z nich nie wykonuje rekursji.