Mam mnóstwo plików, nazwane rzeczy jak 1.jpg
, 2.jpg
, 3.jpg
, i tak dalej, aż do 1439.jpg
, jednak mam problem z jednym z moich projektów i alphabetizing. Będzie to zwykle iść w kolejności 1.jpg
, 10.jpg
, 11.jpg
i tak dalej.
Potrzebuję sposobu na nazwanie plików, aby były w takim formacie, jak do 00001.jpg
samego końca 01439.jpg
.
Jak mógłbym to zrobić szybko i skutecznie?
scripts
batch-rename
Kaz Wolfe
źródło
źródło
ls -v
unix.stackexchange.com/questions/33909/…pyrenamer
.Odpowiedzi:
Ubuntu zawiera skrypt o nazwie
rename
. To tylko mały skrypt Perla, który oferuje wiele potężnych funkcji zmiany nazwy, ale najlepsza (w tym przypadku) jest możliwość uruchomienia Perla podczas wymiany. Rezultatem jest naprawdę kompaktowe rozwiązanie:Jest to podobne do innych
printf
odpowiedzi w tym stylu, ale wszystko jest załatwione dla nas. Powyższy kod dotyczy 5-cyfrowej liczby (w tym zmiennej liczby początkowych zer).Przeszuka i zastąpi pierwszy znaleziony ciąg liczb wersją z zerowaniem i pozostawi resztę nazwy pliku w spokoju. Oznacza to, że nie musisz się zbytnio przejmować przenoszeniem jakiegokolwiek rozszerzenia lub prefiksu.
Uwaga: nie jest to całkowicie przenośne. Wiele dystrybucji używa
rename.ul
zutil-linux
pakietu jako domyślnegorename
pliku binarnego. Jest to znacznie zahamowana alternatywa (patrzman rename.ul
), która nie zrozumie powyższego. Jeśli chcesz to zrobić na platformie, która nie używa nazwy Perla, dowiedz się, jak ją najpierw zainstalować.A oto uprząż testowa:
I przykładowe przedrostki (nie robimy nic innego):
źródło
sprintf
w Perlu zachowuje się podobnie jaksprintf
w innych językach.Edytować
Wyjaśnienie:
if [[ $f =~ [0-9]+\. ]]
upewnia się, że zmieniane są nazwy tylko plików, których nazwy to liczby (po których następuje kropka).printf "%.5d" NUMBER
dodaje wiodące zera"${f%.*}"
wycina rozszerzenie (.jpg) i pozostawia tylko numer.jpg
po drugim naciśnięciu wstecz ponownie dodaje rozszerzenie pliku.Pamiętaj, że będzie to działać tylko w przypadku nazw plików, które są liczbami. Uzupełnianie lewych wiodących zer do plików nienumerowanych wymagałoby innego formatu.
Jeśli chcesz eksperymentować, wypróbuj to polecenie:
Edytuj 2
Zwiększono bezpieczeństwo polecenia, upewniając się, że zmieniane są tylko nazwy plików, które są liczbami. Pamiętaj, że wszystkie istniejące pliki o nazwie jak 00001.jpg zostaną zastąpione.
źródło
Poniżej skryptu python.
Skrypt dodaje zera wiodące do określonej liczby cyfr. Jeśli nazwa jest większa, plik (nazwa) pozostaje nietknięty.
Łączenie różnych rozszerzeń w jedną akcję zmiany nazwy może być wygodniejsze. Aby dodać rozszerzenie (rozszerzenia), po prostu dodaj je na przykład do krotki
extensions = (".jpg", ".jpeg", ".tiff")
.Skopiuj tekst do pustego pliku, zapisz go jako
rename.py
, wprowadź poprawną ścieżkę do katalogu plików (sourcedir
), liczbę cyfr, które mają mieć nowe nazwy (number_ofdigits
) i rozszerzenia (nazwyextensions
) plików, aby zmienić nazwę ( )Uruchom go za pomocą polecenia:
Scenariusz:
edytować:
Poniżej nieco ulepszonej wersji. Automatycznie określa najdłuższą nazwę w katalogu i dodaje zera wiodące do długości najdłuższej nazwy.
przykład:
staje się:
Nie trzeba ustawiać liczby cyfr.
źródło
W Perlu zaimplementowano narzędzie zmiany nazwy, które bardzo ułatwia:
Pierwszy argument to wyrażenie Perla, które jest oceniane dla każdej nazwy pliku.
źródło
Istnieje GUI, które zrobi to o nazwie pyRenamer, które można znaleźć w repozytoriach. Zainstaluj, uruchom, wybierz katalog i po prostu ustaw „Wzorzec nazwy pliku” na „{num5}” na karcie „Wzory” i kliknij przycisk „Zmień nazwę”. Możesz także wyświetlić podgląd tego, co się stanie przed zmianą nazwy.
źródło
shell-scripting
sekcja, co oznacza, że szukam odpowiedzi z linii poleceń. Czy możesz podać więcej szczegółów na temat programu? Na przykład, jaki jest format wzoru{num5}
?Jest to prymitywne, ponieważ nie dokonuje inteligentnej zmiany nazwy, trzeba będzie wymyślić jakąś sztuczkę. Ale powinno ci to pomóc w sortowaniu.
Aktualizacja: Cóż, masz pełniejszą odpowiedź.
źródło