Zmienianie nazw obrazów w określonej kolejności

7

To jest mój problem: mam folder z 500 obrazami o nazwach:

1.jpg
2.jpg
3.jpg

itd.

Skopiowałem ten folder i teraz muszę zmienić nazwy tych samych obrazów z 501 na 1000, ale w następującej kolejności:

1.jpg  becomes    501.jpg
2.jpg  becomes    502.jpg
3.jpg  becomes    503.jpg          
....

Kiedy używam standardowego polecenia zmiany nazwy:

i=501;for img in $(find . -iname '*.jpg'); do echo -n "Converting $img"; mv $img $i.jpg  && echo $i && ((i++)); done

Zamawia obrazy od 501 do 1000, ale wszystkie są rozproszone:

23.jpg becomes 501.jpg,    
66.jpg becomes 502.jpg 
...   

(są w odpowiedniej kolejności, ale miesza je)

Wiem, że to prawdopodobnie jedno polecenie, którego mi brakuje ...

    
zadawane Painkiller 25.08.2017, 19:01
źródło

5 odpowiedzi

7

Wypróbuj Thunar , który jest domyślnym menedżerem plików dla Xfce. Jest bardzo lekki i wyposażony w poręczne narzędzie do zmiany nazwy. Możesz zainstalować Thunara, uruchamiając następujące polecenie w Terminalu:

sudo apt-get install thunar

Prawdopodobnie będziesz w stanie zainstalować także z Ubuntu Software.

Jak korzystać z narzędzia

  1. Po zainstalowaniu Thunara uruchom narzędzie Luzem Rename .
  2. Kliknij ikonę + i dodaj pliki, których nazwę chcesz zmienić w odpowiedniej kolejności.
  3. Kliknij pole rozwijane tuż pod listą wybranych plików i wybierz Numeracja . Kliknij pole obok niego i wybierz Tylko nazwa .
  4. W polu " Rozpocznij za pomocą: " wpisz 501, pozostaw puste pole " Tekst: ". Powinieneś zobaczyć podgląd zmian w kolumnie Nowa nazwa .
  5. Aby zastosować zmiany, kliknij przycisk Zmień nazwy plików .

Poza Numeracją to narzędzie obsługuje następujące akcje:

  • Wstaw datę / godzinę
  • Wstawianie / zastępowanie
  • Usuń znaki
  • Wyszukaj & amp; Wymień
  • Duże / małe litery
odpowiedział pomsky 25.08.2017, 19:16
źródło
13

Polecenie find znajduje pliki w kolejności "katalogów" ( 23.jpg , 66.jpg , ...). po znalezieniu możesz umieścić |sort .

Ale twoje metody są zbyt złożone.

for i in $( seq 1 500 ) ; do
    j=$(( $i + 500 ))
    mv $i.jpg $j.jpg
done 
    
odpowiedział waltinator 25.08.2017, 19:16
źródło
11

Z poleceniem rename .

rename -n 's/^(\d+)/sprintf("%d",+500)/e' *.jpg

Lub w czystym bash i używając rozszerzenia parametrów powłoki .

for FILE in *.jpg; do
    mv "$FILE" "$(( ${FILE%.jpg}+500 )).jpg" 
done 
    
odpowiedział αғsнιη 25.08.2017, 19:43
źródło
5

Jeśli zrozumiałem, o co pytasz poprawnie, myślę, że możesz to zrobić za pomocą domyślnego narzędzia do zmiany nazwy:

rename 's/^(\d+)/sprintf("%d",+500)/e' *.jpg -vn

Po przeprowadzeniu testu należy usunąć przełącznik -vn (verbose - no action), aby zmiana była skuteczna.

    
odpowiedział sempaiscuba 25.08.2017, 19:05
źródło
0

Innym sposobem na osiągnięcie tego przy użyciu tylko polecenia powłoki

count = 1; dla i in ls ; do mv $ i CN $ ((liczba ++)). $ {i ## *.}; gotowe

    
odpowiedział aneeshep 13.02.2018, 08:58
źródło

Przeczytaj inne pytania na temat tagów