Jak zrobić mv original.filename new.original.filename
bez ponownego wpisywania oryginalnej nazwy pliku?
Wyobrażałbym sobie, że jestem w stanie zrobić coś takiego, mv -p=new. original.filename
może mv original.filename new.~
lub cokolwiek innego - ale nie widzę czegoś takiego po obejrzeniu man mv
/ info mv
pages.
Oczywiście mógłbym napisać skrypt powłoki, aby to zrobić, ale czy nie ma do tego istniejącego polecenia / flagi?
Możesz użyć
rename(1)
polecenia:Edycja: jeśli
rename
nie jest dostępny i musisz zmienić nazwę więcej niż jednego pliku, skrypty powłoki mogą być naprawdę krótkie i proste. Na przykład, aby zmienić nazwę wszystkich*.jpg
naprefix_*.jpg
w bieżącym katalogu:źródło
rename 's/(.*).example/$1/' *.example
uratował mnie od nudy.$
w tym scenariuszu. Więc po prostu's/(.*)/new.$1/'
rename
polecenie nie działa na moim komputerze RHEL 6. Czy istnieją różne wersje tego polecenia?for ... done
Pracował dla mnie.Możesz uzyskać zgodną z UNIX możliwość zmiany nazwy wielu plików (używając symboli wieloznacznych), tworząc pętlę for:
źródło
${file%%}
robisz? Wydaje się podobne do po prostu $ {file}Widziałem, jak ludzie wspominali o
rename
poleceniu, ale nie jest ono rutynowo dostępne w systemach Unix (w przeciwieństwie do, powiedzmy, Linuksa lub Cygwin - w obu przypadkach zmiana nazwy jest raczej plikiem wykonywalnym niż skryptem). Ta wersjarename
ma dość ograniczoną funkcjonalność:To zastępuje od części nazwy pliku z Do i przykład podany w manualu jest:
To zmienia nazwę foo1 na foo01 i foo10 na foo010 itd.
Używam skryptu Perla
rename
, który pierwotnie wykopałem z pierwszego wydania książki Camel, około 1992, a następnie rozszerzyłem, aby zmienić nazwy plików.Pozwala to na napisanie dowolnego polecenia podstawienia Perla lub transliteracji w celu odwzorowania nazw plików. W konkretnym żądanym przykładzie użyłbyś:
źródło
pacman
przy użyciu:pacman -Sy perl-rename
. Następnie dodaj do niego alias w swoim bashrc:alias rename='perl-rename'
'.html
do nazw plików, użyj's/$/.html/'
-, aby usunąćtmp
z każdego miejsca w nazwach plików, użyj's/tmp//g'
(znajdźtmp
i zamień na nic wszędzie).Najłatwiejszym sposobem zbiorczej zmiany nazw plików w katalogu jest:
źródło
Jeśli jest otwarty na modyfikację, możesz użyć sufiksu zamiast przedrostka. Następnie możesz użyć uzupełniania tabulatorami, aby uzyskać oryginalną nazwę pliku i dodać sufiks.
W przeciwnym razie nie, to nie jest coś, co jest obsługiwane przez polecenie mv. Jednak prosty skrypt powłoki mógłby sobie poradzić.
źródło
W moim przypadku mam grupę plików, które wymagają zmiany nazwy, zanim będę mógł z nimi pracować. Każdy plik ma swoją rolę w grupie i ma własny wzorzec.
W rezultacie mam listę poleceń zmiany nazwy, taką jak ta:
Spróbuj tego również:
Spowoduje to utworzenie wszystkich kombinacji z przedrostkami i przyrostkami:
Innym sposobem rozwiązania tego samego problemu jest utworzenie tablicy mapowania i dodanie odpowiedniego prefiksu dla każdego typu pliku, jak pokazano poniżej:
źródło
Zbiorcza zmiana nazwy plików skryptu bash
źródło
Wiem, że są tutaj świetne odpowiedzi, ale nie znalazłem odniesienia do obsługi rozszerzeń nazw plików podczas dodawania sufiksu.
Musiałem dodać sufiks „_en” do wszystkich
wav
plików w folderze przed rozszerzeniem pliku.Magia jest tutaj:
%.*
for filename in *.wav; do mv $filename ${filename%.*}_en.wav; done;
Jeśli potrzebujesz obsługiwać różne rozszerzenia plików, zaznacz tę odpowiedź. Nieco mniej intuicyjny.
źródło