Mam wiele plików w folderze i chcę dodać do nich albo prefiks, albo sufiks (nie oba ). Sprawdziłem tutaj i dowiedziałem się, że mogę korzystać
for filename in *.jpg; do mv "$filename" "prefix_$filename"; done;
aby dodać prefiks do wszystkich plików kończących się na .jpg
(a jeśli .jpg
go usunę, doda prefiks do wszystkich plików w bieżącym folderze).
Chciałbym jednak móc
- Dodaj sufiks (czyli zmień nazwę
filename.ext
nafilename.whatever.ext
), - Sprawdź, czy prefiks lub sufiks jest już obecny, a następnie pomiń,
- Utwórz alias, który akceptuje argumenty takie jak
addprefix whatever *.ext
lubaddsufix whatever *.*
shell
shell-script
rename
Ten brazylijski facet
źródło
źródło
if [ $f == $prefix* ]
i możesz zmienić sufiks zaif [ $f == *$suffix$([ ! -z $extension ] && echo -n '.')$extension ]
pomocą kilku poleceń mv w addsuffix. Dla (2) powinien już działać na plikach bez rozszerzenia, chyba że jestem okropnym programistą.Istnieje polecenie Perla,
rename
które powinno załatwić sprawę. Uwaga: wywoływanych jest kilka różnych poleceńrename
, więc upewnij się, że masz skrypt Perla, który oczekujeperlexpr
jako argumentu. Jest torename
polecenie dostarczone przezperl
pakiet na Debianie i jego pochodnych (Ubuntu, Mint,…), ale nie na innych dystrybucjach, które mogą mieć inne narzędzie o nazwierename
.Jak widać, jest idempotentny - nie doda ponownie prefiksu, gdy wywołasz go wiele razy.
Działa poprzez zamianę początku ciągów (o zerowej długości
^
) lub początku, a następnie opcjonalnegoprefix
ciągu naprefix
.Opiszę to jako skrypt dla powłoki lub funkcję powłoki jako ćwiczenie dla ciebie :)
Postfiks jest jednak nieco trudniejszy, ponieważ musisz dowiedzieć się, która część nazwy pliku stanowi rozszerzenie ...
źródło
rename
. Wiem, że sufiksy są nieco trudniejsze, nie zostało to uwzględnione w łączonym pytaniu, a ja jestem początkującym w Linuksie, Bashu, skryptach powłoki, Perlu i wyrażeniach regularnych, więc „nieco trudniej” jest dla mnie dość trudne ! :)Z
zsh
:~
jest masek operatora Oznacza except sięzsh
.źródło
Prosty przykład zmiany prefiksu i rozszerzenia wszystkich obrazów w bieżącym folderze.
Jeśli chcesz sprawdzić, jak wpłynie to na twoje dane przed zmianą, zastąp mv przez echo
wyjście dla IMG_7993.JPG to EG_IMG_7993.jpg
źródło