Jeśli musisz zmienić nazwy plików również w podkatalogach, a Twój predykat find
obsługuje -execdir
, możesz to zrobić
find /search/path -depth -name '* *' \
-execdir bash -c 'mv -- "$1" "${1// /_}"' bash {} \;
Dziękuję @glenn jackman za zasugerowanie -depth
opcji find
i skłonienie mnie do myślenia.
Zauważ, że w niektórych systemach (w tym GNU / Linux) find
może nie być w stanie znaleźć plików, których nazwa zawiera spacje, a także sekwencje bajtów, które nie tworzą prawidłowych znaków (typowe dla plików multimedialnych o nazwach ze znakami spoza ASCII zakodowanych w zestawie znaków inne niż ustawienia regionalne). Ustawienie ustawień regionalnych na C
(jak w LC_ALL=C find...
) rozwiązałoby problem.
find -maxdepth 1
aby zrobić dokładnie to, o co OP poprosił o działanie w bieżącym folderze.-depth
opcji znajdź , a możesz się go pozbyćsort
.-name '* *'
na-name '*_*'
i zmień"${1// /_}"
na"${1//_/.}"
bash
stronie podręcznika użytkownika.W dowolnej powłoce możesz przeglądać pliki, których nazwa zawiera spację. Zamiana spacji na znaki podkreślenia jest łatwa w bash, ksh i zsh za pomocą
${VARIABLE//PATTERN/REPLACEMENT}
konstruktu.Na Debianie, Ubuntu i pochodnych możesz używać Perla
rename
(inne dystrybucje dostarczają inny program jakorename
, a ten program nie jest tutaj pomocny).Obowiązkowe rozwiązanie Zsh:
Obowiązkowe rozwiązanie POSIX:
źródło
s/…/…/g
oznacza zastąpienie wszystkich wystąpień. Nie jest to dobrze wyjaśnione w instrukcji . Jeśli chcesz zmienić nazwy katalogów, istnieją sposoby, poszukaj go (myślę, że już go widziałem), a jeśli nie możesz go znaleźć, zadaj nowe pytanie._MG_blah.JPG
naIMG_blah.JPG
.Możesz
rename
do tego użyć (tutaj zakładając, że ten zutil-linux
, nie tenperl
):Spowoduje to znalezienie przestrzeni wszystkich plików i katalogów w nazwie i zastąpienie spacji znakiem podkreślenia. Ponieważ korzysta z dopasowywania plików glob, na początek musisz znajdować się w odpowiednim katalogu.
Jeśli chcesz wykonywać rekurencyjne dopasowania, możesz, ale może być konieczne wykonanie
rename
kilku razy, aby złapać dowolne elementy w katalogach, których nazwy zostały zmienione:źródło
rename
Zmieni nazwy określonych plików, zastępując pierwsze wystąpienie z w ich nazwie słowem„ do ”. To będzie działać tylko w przypadku plików z pojedynczą spacją w nazwie. (Możesz zadzwonićrename
w pętli, ale tak naprawdę nie jest to właściwe narzędzie.)Inną opcją byłoby
mmv
, jeśli zainstalowano.źródło
_
, nie działa na nazwach z wieloma spacjami.Na Debianie / Ubuntu, w oparciu o odpowiedzi Caleba i Gillesa, działało dla mnie, aby zmieniać nazwy plików rekurencyjnie:
Uwaga: Aby wyświetlić podgląd plików, które zostaną przemianowane i jak, użyj
-n
przełącznika zrename
:Inna uwaga: ustawienie
globstar
powoduje, że**
pliki dopasowania są we wszystkich podkatalogach, więc jeśli pożądany jest tylko bieżący katalog, nie ustawiaj globstar ani nie używaj*
zamiast niego**
.Jeszcze jedna uwaga:
rename
polecenie musi zostać uruchomione więcej niż jeden raz dla plików z wieloma wystąpieniami wyszukiwanego terminu.źródło
a b/c d
naa_b/c_d
nie działa, musisz najpierw zmienić nazwęa b/c d
naa b/c_d
, a następniea b
naa_b
).rename
dwukrotne uruchomienie tego samego polecenia?**
wyklucza pliki kropkowe i trawersuje dowiązania symboliczne.Jeśli nie masz flasha na wyrażeniach regularnych (nie jestem!) I możesz uruchamiać aplikacje zaprojektowane dla KDE (albo używasz KDE - K Desktop, albo masz zainstalowane biblioteki), to Krename to świetne narzędzie graficzne, które pozwala zobaczyć przed i po przed zobowiązać się do zmian. Ma wiele prostych przekształceń jako opcji, a także obsługuje wyrażenia regularne. Możesz nawet połączyć kilka kolejnych transformacji w jedną zmianę nazwy, więc nie musisz projektować jednej złożonej transformacji, która robi to wszystko jednocześnie. Ma również opcję kontynuowania zmiany nazw tych samych plików po zastosowaniu zmiany nazwy.
Nie używam go tak często, ale kiedy to robię, naprawdę szybko i łatwo wykonuje pracę. Naprawdę przydaje się przy zmianie nazw różnych pobranych plików multimedialnych, aby można było nimi jednolicie zarządzać w systemie. Pomaga osobno pobrać instrukcję krename, dzięki czemu można się do niej odwoływać podczas korzystania z programu.
http://www.krename.net/
źródło