Zmienianie nazw plików w folderze na kolejne numery

230

Chcę zmienić nazwę plików w katalogu na kolejne numery. Na podstawie daty utworzenia plików.

Na przykład sadf.jpgdo 0001.jpg, wrjr3.jpgdo 0002.jpgitd. Liczby wiodących zer w zależności od całkowitej liczby plików (nie trzeba dodatkowych zer, jeśli nie są potrzebne).

Gnutt
źródło
Patrzyłem na stackoverflow.com/questions/880467/… , ale nie mogę sprawić, żeby działało dla mnie.
Gnutt,
1
Linux / Unix nie przechowują daty utworzenia.
Wstrzymano do odwołania.
1
ls -1tr | zmień nazwę -v 's /.*/ our $ i; if (! $ i) {$ i = 1;} sprintf ("% 04d.jpg", $ i ++) / e'
mXp

Odpowiedzi:

313

Spróbuj użyć pętli let, a printfdo wypełnienia:

a=1
for i in *.jpg; do
  new=$(printf "%04d.jpg" "$a") #04 pad to length of 4
  mv -i -- "$i" "$new"
  let a=a+1
done

użycie -iflagi zapobiega automatycznemu nadpisywaniu istniejących plików.

gauteh
źródło
4
Możesz także zrobić, printf -v new "%04d.jpg" ${a}aby wstawić wartość do zmiennej. I ((a++))działa na zwiększenie wartości zmiennej. Nie robi to również w kolejności dat utworzenia ani nie minimalizuje wypełnienia, które są określone przez OP. Należy jednak zauważyć, że Linux / Unix nie przechowuje daty utworzenia.
Wstrzymano do odwołania.
3
Potrzebowałem podwójnego cytatu zapakować mv, aby działało to w moim środowisku bash. mv „$ {i}" "$ {new}"
Gary Thomann,
2
Może to być po prostu Cygwin (chociaż jego zachowanie w terminalu jest w dużej mierze identyczne z normalnymi powłokami uniksowymi), ale wydaje się, że ma problem, gdy w nazwie pliku są spacje.
Geesh_SO,
2
Prawdopodobnie byłoby również pożądane, aby mv -- "$i" "$new"poprawnie obsługiwać źródłowe nazwy plików rozpoczynające się od myślników; w tej chwili mvspróbuje parsować takie nazwy plików, jak zbiory flag.
Charles Duffy,
2
W mgnieniu oka straciłem około 800 plików. Myślę, że -ipowinien zostać uwzględniony w odpowiedzi, a notatka powinna zostać odpowiednio przepisana. to będzie bardziej bezpieczne. :(
KrIsHnA
269

Piękno w jednej linii:

ls -v | cat -n | while read n f; do mv -n "$f" "$n.ext"; done 

Można zmienić .extz .png, .jpgitp

Społeczność
źródło
4
legenda :), użyłem tego na git shell na Windowsie, działa świetnie! ^^.
Mr.K
4
Działa świetnie. Piękno w jednej linii. Dodałem ls -tr pobierz pliki według ostatniej modyfikacji.
Ranjith Siji
32
dodaj printf w ten sposób: ls | cat -n | while read n f; do mv "$f" `printf "%04d.extension" $n`; doneaby mieć zerowane liczby
Seweryn Niemiec
8
Ostrzeżenie: możesz dodać -ndo komendy mv, aby zapobiec przypadkowemu nadpisaniu plików. Odkryłem to na własnej skórze!
Ian Danforth
4
Łącząc kilka świetnych pomysłów z komentarzy do tej odpowiedzi i innych: ls -1prt | grep -v "/$" | cat -n | while read n f; do mv -n "${f}" "$(printf "%04d" $n).${f#*.}"; done Wyniki: (1) posortowane w kolejności modyfikacji, późniejsze pliki z późniejszymi indeksami; (2) ignoruje katalogi - i nie rekurencyjne; (3) indeksy padów; (4) zachowuje oryginalne rozszerzenie.
Jorge
63

Podoba mi się rozwiązanie gauteh ze względu na jego prostotę, ale ma ono istotną wadę. Podczas uruchamiania na tysiącach plików możesz otrzymać komunikat „lista argumentów za długa” ( więcej na ten temat ), a po drugie, skrypt może działać naprawdę wolno. W moim przypadku, uruchamiając go na około 36 000 plików, skrypt przeniósł się o ok. jeden przedmiot na sekundę! Nie jestem do końca pewien, dlaczego tak się dzieje, ale zasada, którą otrzymałem od kolegów, brzmiała: findjest twoim przyjacielem” .

find -name '*.jpg' | # find jpegs
gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | # build mv command
bash # run that command

Aby policzyć przedmioty i zbudować polecenie, gawk użyto . Zwróć jednak uwagę na główną różnicę. Domyślnie findwyszukuje pliki w bieżącym katalogu i jego podkatalogach, więc w razie potrzeby ogranicz wyszukiwanie tylko w bieżącym katalogu (użyj, man findaby zobaczyć, jak to zrobić).

Pero
źródło
7
Zmodyfikowałem, aby użyć numeru wiersza NRdla krótszego polecenia. gawk '{ printf "mv %s %04d.jpg\n", $0, NR }'
Apiwat Chantawibul
12
Ogromne luki w zabezpieczeniach tutaj. Zastanów się, czy masz plik o nazwie $(rm -rf /).jpg.
Charles Duffy,
Dzięki za zwrócenie uwagi na Charlesa. Czy możesz zasugerować bezpieczne rozwiązanie?
beibei2
2
psuje się w przypadku, gdy nazwa pliku zawiera spacje. Użyj cudzysłowu wokół źródłowej nazwy pliku. printf "mv \"% s \ "% 04d.jpg \ n", 0 $, a ++
baskin
1
forPętla nie trwa 1 sekundę na plik, ściśle mówiąc. Pobieranie 36 000 nazw plików z systemu plików zajmuje dużo czasu, a następnie dość szybkie zapętlenie. Wiele systemów plików ma problemy z dużymi katalogami, niezależnie od tego, jakie dokładne polecenia uruchamiasz; ale zwykle findbędzie szybszy niż znak wieloznaczny powłoki, ponieważ musi pobrać i posortować listę pasujących plików.
tripleee
30

za pomocą polecenia „zmień nazwę”

rename -N 0001 -X 's/.*/$N/' *.jpg

lub

rename -N 0001 's/.*/$N.jpg/' *.jpg
Roman Rhrn Niestierow
źródło
32
Mój rename(Linux Mint 13) nie ma -Nopcji.
Łukasz H
Mogę głosować tylko za wzmianką o poleceniu zmiany nazwy, nigdy o niej nie słyszałem
user907860,
8
Chcę wiedzieć, skąd się bierze polecenie zmiany nazwy z opcją -N. Moje Ubuntu 14.04 tego nie ma.
Stephan Henningsen,
1
Uwielbiam to renamepolecenie, ale nigdy nie wiedziałem -N! Dzięki!
Dan Lecocq,
1
Istnieją co najmniej trzy różne narzędzia znane jakorename . Link opublikowany przez @Bostrot to kolejne narzędzie do zmiany nazwy i wygląda na to, że @RomanRhrnNesterov tego użył. Do wszystkich użytkowników renamePeder Stray i Larry Wall (pakiet perl-renamena arch Linux i pakiet renamena debian / ubuntu): Możesz zdefiniować $Nsiebie:perl-rename '$N=sprintf("%04d",++$N); s/.*/$N.jpg/' *.jpg
Socowi
30

korzystanie z rozwiązania Pero w OSX wymagało pewnych modyfikacji. Użyłem:

find . -name '*.jpg' \
| awk 'BEGIN{ a=0 }{ printf "mv \"%s\" %04d.jpg\n", $0, a++ }' \
| bash

Uwaga: ukośniki odwrotne służą do kontynuacji linii

edytuj 20 lipca 2015 r .: uwzględniono opinię @ klaustopher, aby zacytować \"%s\"argument mvpolecenia w celu obsługi nazw plików ze spacjami.

beibei2
źródło
3
Podobnie jak rozwiązanie Pero, istnieją tutaj luki w zabezpieczeniach. Zastanów się, czy masz plik o nazwie $(rm -rf /).jpg.
Charles Duffy,
Dzięki, to działa. Ale powinieneś zacytować pierwszy argument mv. Jeśli masz plik o nazwie tzn. some thing.jpgSkrypt nie działa. Właśnie tego użyłem:find . -name '*.jpg' | awk 'BEGIN{ a=0 }{ printf "mv \"%s"\ wallpaper-%04d.jpg\n", $0, a++ }' | bash
klaustopher
prawdopodobnie -maxdepth 1użyłbym do pracy tylko na plikach JPG w bieżącym katalogu, ponieważ lepiej być bezpiecznym niż żałować.
Peter Perháč,
Jeśli przeniesiesz znak potoku na koniec poprzedniego wiersza, nie potrzebujesz żadnych odwrotnych ukośników.
tripleee
możesz użyć ls -1 *.jpgzamiast znaleźć, inaczej nie zostanie posortowane. Lub dodaj |sort|przed awk
JPT
28

Bardzo prosty bash one liner, który zachowuje oryginalne rozszerzenia, dodaje zera na początku, a także działa w OSX:

num=0; for i in *; do mv "$i" "$(printf '%04d' $num).${i#*.}"; ((num++)); done

Uproszczona wersja http://ubuntuforums.org/showthread.php?t=1355021

Roy Shilkrot
źródło
Dokładnie tego szukałem. Podoba mi się, że możesz ustawić indeks początkowy.
Jack Vial
2
Pamiętaj, że nie zachowa to oryginalnej kolejności plików.
Roy Shilkrot,
@RoyShilkrot Co rozumiesz przez » nie zachowa oryginalnego zamówienia «? Globusy w powłoce bash i innych powłokach posiksowych rozwijają się w uporządkowanej kolejności zgodnie z ustawieniami regionalnymi systemu. Oczywiście nie sortuje się 9.extwcześniej 11.ext, ale inne narzędzia (jak ls) też tego nie zrobią.
Socowi
11

Aby pracować we wszystkich sytuacjach, umieść \ "dla plików, które mają miejsce w nazwie

find . -name '*.jpg' | gawk 'BEGIN{ a=1 }{ printf "mv \"%s\" %04d.jpg\n", $0, a++ }' | bash
Abdala Cerqueira
źródło
3
W rzeczywistości nie obejmuje wszystkich sytuacji. Nazwa pliku zawierająca dosłowne cudzysłowy może w prosty sposób uciec - a ponieważ używasz podwójnych cudzysłowów zamiast pojedynczych cudzysłowów, rozszerzenia takie jak $(rm -rf /)są nadal honorowane.
Charles Duffy,
11

Jeśli renamenie obsługuje -N, możesz zrobić coś takiego:

ls -1 -c | xargs rename -n 's/.*/our $i; sprintf("%04d.jpg", $i++)/e'

Edycja Aby rozpocząć od podanego numeru, możesz użyć (nieco brzydko wyglądającego) kodu poniżej, po prostu zamień 123 na żądany numer:

ls -1 -c | xargs rename -n 's/.*/our $i; if(!$i) { $i=123; } sprintf("%04d.jpg", $i++)/e'

Lista plików jest uporządkowana według czasu utworzenia (najpierw najnowsze, dodaj -r do ls, aby odwrócić sortowanie), a następnie wysyła tę listę plików do zmiany nazwy. Zmień nazwę używa kodu perla w wyrażeniu regularnym do formatowania i zwiększania licznika.

Jeśli jednak masz do czynienia z obrazami JPEG z informacjami EXIF, polecam exiftool

To z dokumentacją exiftool pod „Zmiana nazwy przykładach”

   exiftool '-FileName<CreateDate' -d %Y%m%d_%H%M%S%%-c.%%e dir

   Rename all images in "dir" according to the "CreateDate" date and time, adding a copy number with leading '-' if the file already exists ("%-c"), and
   preserving the original file extension (%e).  Note the extra '%' necessary to escape the filename codes (%c and %e) in the date format string.
Luke H.
źródło
Jak mogę zacząć od określonego numeru za pomocą rename?
Jan
6

W OSX zainstaluj skrypt zmiany nazwy z Homebrew:

brew install rename

Następnie możesz to zrobić naprawdę śmiesznie łatwo:

rename -e 's/.*/$N.jpg/' *.jpg

Lub dodać ładny prefiks:

rename -e 's/.*/photo-$N.jpg/' *.jpg
trisweb
źródło
3
To świetny skrypt i zależy tylko od Perla. brew działa tylko na komputerach Mac, ale możesz go pobrać z github ( github.com/ap/rename ) i używać go w systemie Linux lub Windows.
Tim Danner
3
to nie działa dla mnie. MamGlobal symbol "$N" requires explicit package name (did you forget to declare "my $N"?) at (user-supplied code).
Anthony Chung,
Jako użytkownik komputera Mac z przyjemnością informuję, że aplikacja zmiany nazwy połączona z @TimDanner jest super przenośna, to tak proste, jak pobranie archiwum Zip, upuszczenie narzędzia zmiany nazwy do katalogu, w którym jest ustawiona ścieżka mojego profilu bash i działa od razu po wyjęciu z pudełka. Dziwi mnie, że to nie jest dostępne na MacPorts. Uważam to za tak dziwne, że mam stronę podręczną BSD dotyczącą zmiany nazwy (2), ale po uruchomieniu zmiany nazwy oznaczałoby to brak polecenia. Domyśl.
adamlogan
2

Postępuj zgodnie z poleceniem zmień nazwę wszystkich plików na sekwencję, a także rozszerz małe litery:

rename --counter-format 000001 --lower-case --keep-extension --expr='$_ = "$N" if @EXT' *
OzzyCzech
źródło
1

Z tego powodu miałem podobny problem i napisałem skrypt powłoki. Postanowiłem opublikować, niezależnie od tego, że opublikowano już wiele dobrych odpowiedzi, ponieważ uważam, że może to być pomocne dla kogoś. Możesz to poprawić!

numerować

@Gnutt Żądane zachowanie można osiągnąć, wpisując następujące polecenie:

./numerate.sh -d <path to directory> -o modtime -L 4 -b <startnumber> -r

Jeśli opcja -rzostanie pominięta, rozwiercanie będzie tylko symulowane (powinno być pomocne podczas testowania).

Opcja L opisuje długość numeru docelowego (który będzie wypełniony zerami wiodącymi) można również dodać prefiks / sufiks z opcjami -p <prefix> -s <suffix>.

Jeśli ktoś chce, aby pliki zostały posortowane numerycznie przed ich ponumerowaniem, po prostu usuń -o modtimeopcję.

Paul Weibert
źródło
1
a=1

for i in *.jpg; do
 mv -- "$i" "$a.jpg"
 a=`expr $a + 1`
done
Shubh
źródło
1

Załóżmy, że mamy te pliki w katalogu, uporządkowanym według kolejności tworzenia, z których pierwszy jest najstarszy:

a.jpg
b.JPG
c.jpeg
d.tar.gz
e

następnie ls -1crwypisuje dokładnie powyższą listę. Następnie możesz użyć rename:

ls -1cr | xargs rename -n 's/^[^\.]*(\..*)?$/our $i; sprintf("%03d$1", $i++)/e'

które wyjścia

rename(a.jpg, 000.jpg)
rename(b.JPG, 001.JPG)
rename(c.jpeg, 002.jpeg)
rename(d.tar.gz, 003.tar.gz)
Use of uninitialized value $1 in concatenation (.) or string at (eval 4) line 1.
rename(e, 004)

Ostrzeżenie „użycie niezainicjowanej wartości […]” jest wyświetlane dla plików bez rozszerzenia; możesz to zignorować.

Usuń -nz renamepolecenia, aby faktycznie zastosować zmianę nazwy.

Ta odpowiedź jest inspirowana odpowiedzią Łukasza z kwietnia 2014 r . Ignoruje wymóg Gnutta, aby ustawić liczbę wiodących zer w zależności od całkowitej liczby plików.

Michael Schmid
źródło
To była dla mnie najbardziej użyteczna odpowiedź, głównie dlatego, że chciałem uruchomić operację przed uruchomieniem na sucho, a także dlatego, że mogłem dostroić kolejność, zmieniając ls -1tUna czas tworzenia. Musiał także renamezainstalować, czego nie miałem.
antonyh
1

Ponownie używam rozwiązania Pero z niewielkimi modyfikacjami, ponieważ find będzie przechodzić drzewo katalogów w kolejności, w której pozycje są przechowywane w pozycjach katalogu. Będzie to (przeważnie) spójne od uruchomienia do uruchomienia na tym samym komputerze i będzie zasadniczo „kolejnością tworzenia plików / katalogów”, jeśli nie zostaną usunięte.

Jednak w niektórych przypadkach musisz uzyskać logiczną kolejność, powiedzmy według nazwy, która jest używana w tym przykładzie.

find -name '*.jpg' | sort -n | # find jpegs
gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | # build mv command
bash # run that command 
Ruslan Gerasimov
źródło
3
NIE używaj tego. Przekierowanie do basha w ten sposób stanowi ogromne zagrożenie bezpieczeństwa. Co jeśli jedna z nazw plików ma formę blahblah; rm -r * blahblah.jpg?
xhienne
1

Posortowane według czasu, ograniczone do jpg, zer wiodących i nazwy basename (na wypadek, gdybyś chciał):

ls -t *.jpg | cat -n |                                           \
while read n f; do mv "$f" "$(printf thumb_%04d.jpg $n)"; done

(wszystko w jednej linii, bez \)

Frank Nocke
źródło
W wielkim schemacie rzeczy wiele odpowiedzi na tej stronie jest okropnych, więc może to nie zasługuje na szczególną opinię. Waham się jednak, aby głosować na wszystko, co wykorzystuje lsskrypt.
tripleee
Zapisuję tę odpowiedź od strony negatywnej, ponieważ choć być może krucha, zadziałała w konkretnym przypadku, jaki miałem.
Ville,
1
ls -1tr | rename -vn 's/.*/our $i;if(!$i){$i=1;} sprintf("%04d.jpg", $i++)/e'

rename -vn - usuwa n, aby wyłączyć tryb testowy

{$ i = 1;} - numer startowy kontroli

„% 04d.jpg” - licznik zera zero 04 i ustaw rozszerzenie wyjściowe .jpg

MAKS
źródło
Uaktualnienie tej odpowiedzi, ponieważ używa ona tylko natywnej zmiany nazwy. Moim przypadkiem użycia było zastąpienie pierwszych dwóch cyfr plików liczbami zaczynającymi się od 01:rename -v -n 's/../our $i;if(!$i){$i=1;} sprintf("%02d", $i++)/e' *
min.
1

Dla mnie ta kombinacja odpowiedzi działała idealnie:

ls -v | gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | bash
  • ls -v pomaga w prawidłowym zamówieniu 1 10 9: 1 9 10, unikając problemów z rozszerzaniem nazw plików w JPG JPG JPEG
  • gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }'przenumeruje 4 znaki i wiodące zera. Unikając mv, nie próbuję przypadkowo zastąpić niczego, co już istnieje, przypadkowo mając ten sam numer.
  • bash wykonuje

Pamiętaj, co powiedział @xhienne, przesyłanie nieznanych treści do basha stanowi zagrożenie bezpieczeństwa. Ale tak nie było, ponieważ korzystałem z zeskanowanych zdjęć.

nintendojet
źródło
0

Możesz także użyć ls

ls *.JPG| awk 'BEGIN{ a=0 }{ printf "mv %s gopro_%04d.jpg\n", $0, a++ }' | bash
Bartburkhardt
źródło
5
Zobacz mywiki.wooledge.org/ParsingLs , a także opisy luk bezpieczeństwa w innych, podobnie uszkodzonych rozwiązaniach.
Charles Duffy,
1
NIE używaj tego. Przekierowanie do basha w ten sposób stanowi ogromne zagrożenie bezpieczeństwa. Co jeśli jedna z nazw plików ma formę blahblah; rm -r * blahblah.JPG?
xhienne
0

Większość innych rozwiązań zastąpi istniejące pliki, które zostały już nazwane liczbą. Jest to szczególnie problem podczas uruchamiania skryptu, dodawania kolejnych plików, a następnie ponownego uruchamiania skryptu.

Ten skrypt najpierw zmienia nazwy istniejących plików numerycznych:

#!/usr/bin/perl

use strict;
use warnings;

use File::Temp qw/tempfile/;

my $dir = $ARGV[0]
    or die "Please specify directory as first argument";

opendir(my $dh, $dir) or die "can't opendir $dir: $!";

# First rename any files that are already numeric
while (my @files = grep { /^[0-9]+(\..*)?$/ } readdir($dh))
{
    for my $old (@files) {
        my $ext = $old =~ /(\.[^.]+)$/ ? $1 : '';
        my ($fh, $new) = tempfile(DIR => $dir, SUFFIX => $ext);
        close $fh;
        rename "$dir/$old", $new;
    }
}

rewinddir $dh;
my $i;
while (my $file = readdir($dh))
{
    next if $file =~ /\A\.\.?\z/;
    my $ext = $file =~ /(\.[^.]+)$/ ? $1 : '';
    rename "$dir/$file", sprintf("%s/%04d%s", $dir, ++$i, $ext); 
}
Andy Beverley
źródło
0

Ten oneliner wyświetla listę wszystkich plików w bieżącym katalogu, sortuje według znacznika czasu utworzenia w odwrotnej kolejności (oznacza, że ​​najstarszy plik znajduje się na początku) i zmienia automatycznie nazwy z końcowymi zerami, zgodnie z ilością plików. Rozszerzenie pliku zostanie zachowane.

Zwykle od lat mam tylko jeden folder na zdjęcia i filmy z telefonów komórkowych. Po zastosowaniu tego polecenia moje zdjęcia i filmy są gotowe do pokazu slajdów we właściwej kolejności na telewizorze lub do archiwizacji.

Pamiętaj, że jeśli masz kolizje nazw plików, tracisz pliki. Więc najpierw zmień nazwę na coś dziwnego, temp001.jpga następnie uruchom na ostateczną nazwę pliku.

DIGITS=$(ls | wc -l | xargs | wc -c | xargs); ls -tcr | cat -n | while read n f; do mv "$f" "$(printf "%0${DIGITS}d" $n).${f##*.}"; done
Flavio Aiello
źródło
1
lsLepiej unikać biegania nie raz, ale dwa razy tak, ale nie badałem go dogłębnie.
tripleee
1. Jeśli celowo proponuję oneliner, dlaczego zmieniacie go później? Wielu użytkowników takich jak ja woli kopiować i wklejać oneliner, aby wykonać zadanie. Dla innych, którzy wolą kopiować wiersz po wierszu, w tym wątku znajdują się inne odpowiedzi. 2. Pierwotne pytanie brzmiało: „liczba wiodących zer w zależności od całkowitej liczby plików”, i robi się to przez pierwsze ls, dlatego właśnie dwa z nich są wymagane. 3. Takie polecenia są jednorazowe i nie powinny być uwzględniane w skryptach, dlatego istnieje powód, dla którego ludzie wolą liniówki
Flavio Aiello
1
Przepraszamy, nie zdawałem sobie sprawy, że uważasz, że to ważne. Dla mnie umiejętność czytania kodu znacznie przewyższa możliwość kopiowania / wklejania go jako pojedynczej linii. Nie znalazłem środowiska, w którym Bash miałby problem z wklejaniem obejmującym wiele linii, ale mogę coś przeoczyć.
tripleee
0

Oto, co zadziałało dla mnie.
Użyłem polecenia zmiany nazwy, więc jeśli jakikolwiek plik zawiera spacje w nazwie, mv komenda nie myli się między spacjami a rzeczywistym plikiem.

Tutaj zamieniłem spacje ”w nazwie pliku na„ _ ”dla wszystkich plików jpg
#! / bin / bash
zmień nazwę „y / / _ /” * jpg # zamiana spacji na _
niech x = 0;
dla i w * .jpg; do
    niech x = (x + 1)
    mv $ i $ x.jpg
Gotowe
rishang bhavsar
źródło
Zainstaluj zmianę nazwy w
systemie
0

Obecnie istnieje opcja po wybraniu wielu plików do zmiany nazwy (widziałem w menedżerze plików Thunar).

  1. wybierz wiele plików
  2. sprawdź opcje
  3. wybierz zmień nazwę

Monit zawiera wszystkie pliki w tym konkretnym katalogu, wystarczy sprawdzić w sekcji kategorii

Rudr
źródło
-1

Ten skrypt posortuje pliki według daty utworzenia w systemie Mac OS bash. Używam go do masowej zmiany nazw filmów. Wystarczy zmienić rozszerzenie i pierwszą część nazwy.

ls -trU *.mp4| awk 'BEGIN{ a=0 }{ printf "mv %s lecture_%03d.mp4\n", $0, a++ }' | bash
Adam Mendoza
źródło
1
NIE używaj tego. Przekierowanie do basha w ten sposób stanowi ogromne zagrożenie bezpieczeństwa. Co jeśli jedna z nazw plików ma formę blahblah; rm -r * blahblah.mp4?
xhienne
-1

Oto inne rozwiązanie z poleceniem „zmień nazwę”:

find -name 'access.log.*.gz' | sort -Vr | rename 's/(\d+)/$1+1/ge'
panticz
źródło
Aby przywrócić rename 's/(\d+)/sprintf("%04d",$1)+1/ge'
początkowe
Nie działa zgodnie z oczekiwaniami, w przypadku folderu zawierającego pliki o takich nazwach: DSC_3451.JPG, DSC_3452.JPG itp. Find -name '* .JPG' | sort -Vr | zmiana nazwy „s / (\ d +) / $ 1 + 1 / ge” nic nie zmienia
Tiberiu C.,
-2

Odpowiedź Pero mnie tu zaprowadziła :)

Chciałem zmienić nazwę plików w stosunku do czasu, ponieważ przeglądarki nie wyświetlały obrazów w kolejności czasowej.

ls -tr *.jpg | # list jpegs relative to time
gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | # build mv command
bash # run that command
marikhu
źródło
2
NIE używaj tego. Przekierowanie do basha w ten sposób stanowi ogromne zagrożenie bezpieczeństwa. Co jeśli jedna z nazw plików ma formę blahblah; rm -r * blahblah.jpg? Tylko ekstremalny przykład.
xhienne
-2

Jeśli używasz Annotatora obrazu do etykietowania obrazów.

$ make qt5py3

$ python3 labelImg.py

soumen sinha mahapatra
źródło
-3

Aby zmienić numerację 6000 plików w jednym folderze, możesz użyć opcji „Zmień nazwę” programu ACDsee.

Aby zdefiniować prefiks, użyj tego formatu: ####"*"

Następnie ustaw numer początkowy i naciśnij Zmień nazwę, a program zmieni nazwę wszystkich 6000 plików na kolejne numery.

Stóg
źródło
1
OP prosi o zestaw poleceń w uniksowej powłoce Bourne'a. Proponujesz produkt komercyjny, który działa tylko w środowisku Windows.
xhienne