Muszę zmienić nazwę:
file_001_loremipsum.png
file_002_dolor.png
file_003_sit.png
file_004_amet.png
file_105_randomness.png
w
upl_loremipsum.png
upl_dolor.png
upl_sit.png
upl_amet.png
upl_randomness.png
Jak to zrobić za pomocą jednej prostej linii poleceń terminalu?
rename
regex
batch-rename
Unamata Sanatarai
źródło
źródło
Odpowiedzi:
Rozwiązanie powyższego przykładu przy użyciu zmiany nazwy :
Stosowanie:
Od
man rename
:zmiana nazwy MOŻE przyjąć wyrażenia regularne jako argumenty.
Patrzymy na treść między pojedynczymi cytatami
'
. Możesz umieścić regex oddzielone przez/
.Formuła:
s/(1)/(2)/
gdzie(1)
= wzór wyszukiwania i(2)
= zamień wzór.Więc zapoznania youself z regex , i cieszyć się zmiany nazwy pliku wsadowego wzór oparty!
źródło
rename
łatwo go zainstalowaćbrew install rename
.--no-act
flaga jest--nono
zamiast tego. Ta odpowiedź może być również nieco bardziej wyraźna:[files]
odnosi się do początkowego pliku pasującego do wzorca w bieżącym katalogu, który chce się potencjalnie zmienić (np.*
Pasuje do wszystkiego, ale tylko w bieżącym katalogu).rename
, który ma formatrename from to file
i nie obsługuje wyrażeń regularnych. W rzeczywistości moja dystrybucja Linuksa (Cent OS 7) ma dokładnie tę wersję.jeśli pliki znajdują się w katalogach częściowych, użyj zmiany nazwy po znalezieniu, np .:
-n po zmianie nazwy ma przetestować, usuń ją, aby kontynuować! -)
w ten sposób kojarzysz znajdowanie i zmianę nazwy mocy.
Osobiście użyłem go do zmiany nazwy nagłówka źródeł .h na .hpp
źródło
-iname
,-type
oraz-exec
flagi w manpages.ubuntu.com/manpages/bionic/man1/find.1.html#expression . (find --help
nie jest to szczególnie pomocne w przypadku tego polecenia.) TL; DR:-iname
dopasowuje wzór bez rozróżniania wielkości liter;-type f
dopasowuje „zwykłe pliki”; i-exec
wykonuje wyrażenie, dopóki nie napotka;
znaku (średnika).Można tego dokonać z niewielką magią rozszerzania parametrów bash!
file_[0-9]*_*;
- Pierwszy wzorzec służy do przechodzenia przez wszystkie pliki zaczynające się od „numer_pliku_”${f#file_[0-9]*_}
- Drugi wzorzecfile_[0-9]*_
jest używany w rozszerzaniu parametrów, który każe bashowi usunąć „numer_pliku_” z początku łańcucha.Aby uzyskać więcej informacji na temat
Parameter expansion
:źródło
[0-9]*
dopasuje jedną cyfrę, po której następuje dowolny ciąg. Prawdopodobnie jest lepszy sposób na dopasowanie tylko liczb, ale nie mogę wymyślić niczego zwięzłego.