Mam katalog, który zawiera numerowane pliki obrazów, mniej więcej tak:
01.png
02.png
03.png
03.svg
04.png
05.png
06.jpg
07.png
08.png
09.png
09.svg
10.png
Czasami może istnieć wiele wersji pliku w różnych formatach (np. A png
oraz svg
wersja 03
i 09
pliki powyżej), ale w przeciwnym razie liczby są kolejne. Zazwyczaj w każdym katalogu znajduje się 40–80 takich plików. Liczby odpowiadają kolejności, w jakiej te obrazy pojawiają się w manuskrypcie (dokument Word, ale to nie jest ważne). Nie ma innego sposobu na określenie kolejności obrazów.
Jeśli dodam nowy obraz do rękopisu, muszę umieścić kopię obrazu w tym katalogu z poprawną numeracją. Więc jeśli nowy obraz jest piąty w rękopisie, muszę zmienić nazwę plików w katalogu na to, aby zrobić dla niego miejsce:
01.png
02.png
03.png
03.svg
04.png
06.png
07.jpg
08.png
09.png
10.png
10.svg
11.png
Jaki jest najprostszy sposób z wiersza poleceń lub skryptu lub makra, aby ponownie numerować wszystkie pliki zaczynające się od określonej liczby? Mam standardową instalację Fedory Linux za pomocą bash.
Byłoby to łatwiejsze w Zsh, gdzie możesz użyć
On
kwalifikator glob na mecze sortowanie malejące (in
używać kolejności numerycznej, w przypadku nazwy plików nie wszyscy mają początkowych zer na tej samej szerokości);(l:WIDTH::FILLER:)
flaga rozszerzenie parametr w celu wypełnienia wszystkich numerów do tej samej szerokości (szerokości większej liczby).W bash, oto skrypt, który zakłada, że pliki są dopełniane do stałej szerokości (w przeciwnym razie skrypt nie zmieni nazwy odpowiednich plików) i pady do stałej szerokości (którą należy określić).
źródło
Dokładny problem jest omówiony w tym artykule . Pamiętaj, że musisz go zmodyfikować, aby obsługiwał formaty SVG i PNG, dodając drugi krok SN.
źródło
Łatwiej:
Dostaniesz:
źródło
Wydaje się, że ostatnio nie ma zainteresowania tym pytaniem, ale jeśli ktoś się na niego natknie, istnieją tutaj trzy kwestie. Jednym z nich jest wybór plików do zmiany nazwy na podstawie kryteriów semantycznych (zakres nie jest leksykalny i nie można go określić za pomocą symboli wieloznacznych ani nawet wyrażeń regularnych - teoria automatów mówi, że jest to bardziej złożone niż NFA). Drugim jest, jak zmienić nazwę, modyfikując jej część. Trzecim jest, jak uniknąć kolizji nazw. Skrypt w Bash i wielu innych językach może dokonać tej konkretnej transformacji, ale większość z nas wolałaby nie pisać programu za każdym razem, gdy chcemy zmienić nazwę kilku plików. Z moim (darmowym i otwartym źródłem) rene.py możesz robić, co chcesz, ale potrzeba dwóch wywołań, aby uniknąć problemu kolizji nazw. Pierwszy
rene ?.*/#7-80 %?.* B
zwiększa wszystkie nazwy w zakresie, dodając prefiks%, aby uniknąć istniejących nazw. Następnierene %* *
usuwa ten prefiks z plików, które go mają. Opisuję to na https://sourceforge.net/p/rene-file-renamer/discussion/examples/thread/f0fe8aa63c/źródło