Mengganti nama file dalam folder ke nomor urut

230

Saya ingin mengubah nama file dalam direktori menjadi nomor urut. Berdasarkan tanggal pembuatan file.

Misalnya sadf.jpguntuk 0001.jpg, wrjr3.jpguntuk 0002.jpgdan sebagainya, jumlah nol terkemuka tergantung pada jumlah total file (tidak perlu untuk nol tambahan jika tidak diperlukan).

Gnutt
sumber
Saya telah mencari di stackoverflow.com/questions/880467/... , tapi saya tidak bisa menggunakannya untuk saya.
Gnutt
1
Linux / Unix tidak menyimpan tanggal pembuatan.
Dijeda sampai pemberitahuan lebih lanjut.
1
ls -1tr | rename -v 's /.*/ $ i kami; if (! $ i) {$ i = 1;} sprintf ("% 04d.jpg", $ i ++) / e'
maXp

Jawaban:

314

Coba gunakan loop let,, dan printfuntuk padding:

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

menggunakan -ibendera mencegah secara otomatis menimpa file yang ada.

gauteh
sumber
4
Anda juga bisa melakukan printf -v new "%04d.jpg" ${a}untuk memasukkan nilai ke dalam variabel. Dan ((a++))berfungsi untuk meningkatkan variabel. Juga, ini tidak melakukannya dalam urutan tanggal pembuatan atau meminimalkan bantalan yang ditentukan OP. Namun, perlu dicatat bahwa Linux / Unix tidak menyimpan tanggal pembuatan.
Dijeda sampai pemberitahuan lebih lanjut.
3
Diperlukan dua kali lipat bungkus mv agar ini berfungsi di lingkungan bash saya. mv "$ {i}" "$ {new}"
Gary Thomann
2
Mungkin saja Cygwin (meskipun perilaku terminal sebagian besar identik dengan shell Unix normal) tetapi tampaknya memiliki masalah ketika ada ruang dalam nama file.
Geesh_SO
2
Mungkin juga diinginkan untuk menggunakan mv -- "$i" "$new"dengan benar menangani nama file sumber yang dimulai dengan tanda hubung; apa adanya, mvakan mencoba mengurai nama file seperti koleksi bendera.
Charles Duffy
2
Sekilas saya kehilangan sekitar 800 file. Saya pikir -iharus dimasukkan dalam jawaban dan catatan harus ditulis ulang sesuai. itu akan lebih aman. :(
KrIsHnA
270

Kecantikan dalam satu baris:

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

Anda dapat mengubah .extdengan .png, .jpg, dll

Komunitas
sumber
4
legenda :), saya menggunakan ini pada shell git di windows, bekerja dengan baik! ^^.
Mr.K
4
Bagus sekali. Kecantikan dalam satu baris. Saya menambahkan ls -tr dapatkan file dengan waktu modifikasi terakhir.
Ranjith Siji
32
tambahkan printf seperti ini: ls | cat -n | while read n f; do mv "$f" `printf "%04d.extension" $n`; doneuntuk memiliki nol angka empuk
Seweryn Niemiec
8
Peringatan: Anda mungkin ingin menambahkan -nperintah mv untuk mencegah menimpa file secara tidak sengaja. Menemukan ini dengan cara yang sulit!
Ian Danforth
4
Menyusun beberapa ide hebat dari komentar pada jawaban ini dan yang lain: ls -1prt | grep -v "/$" | cat -n | while read n f; do mv -n "${f}" "$(printf "%04d" $n).${f#*.}"; done Hasil: (1) diurutkan dalam urutan modifikasi, file kemudian dengan indeks kemudian; (2) mengabaikan direktori - dan tidak rekursif; (3) indeks bantalan; (4) memelihara ekstensi asli.
Jorge
63

Saya suka solusi gauteh karena kesederhanaannya, tetapi memiliki kelemahan penting. Saat berjalan di ribuan file, Anda bisa mendapatkan pesan "daftar argumen terlalu panjang" ( lebih lanjut tentang ini ), dan kedua, skrip bisa menjadi sangat lambat. Dalam kasus saya, menjalankannya di sekitar 36.000 file, skrip bergerak kira-kira. satu item per detik! Saya tidak begitu yakin mengapa ini terjadi, tetapi aturan yang saya dapatkan dari rekan adalah " findadalah teman Anda" .

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

Untuk menghitung item dan membangun perintah, gawk digunakan. Perhatikan perbedaan utamanya. Secara default findmencari file dalam direktori saat ini dan subdirektori, jadi pastikan untuk membatasi pencarian hanya pada direktori saat ini, jika perlu (gunakan man finduntuk melihat caranya).

Pero
sumber
7
Saya dimodifikasi untuk menggunakan nomor baris NRuntuk perintah yang lebih pendek. gawk '{ printf "mv %s %04d.jpg\n", $0, NR }'
Apiwat Chantawibul
12
Kerentanan keamanan besar-besaran di sini. Pikirkan jika Anda memiliki file bernama $(rm -rf /).jpg.
Charles Duffy
Terima kasih telah menunjukkan Charles. Bisakah Anda menyarankan solusi yang aman?
beibei2
2
rusak jika nama file memiliki spasi. Gunakan tanda kutip di sekitar nama file sumber. printf "mv \"% s \ "% 04d.jpg \ n", $ 0, a ++
baskin
1
The forLoop tidak mengambil 1 detik per file, tegasnya. Butuh waktu lama untuk mengambil 36.000 nama file dari sistem file, lalu mengatasinya dengan cepat. Banyak sistem file memiliki masalah dengan direktori besar, terlepas dari perintah tepat yang Anda jalankan; tetapi biasanya, findakan lebih cepat daripada shell wildcard karena harus mengambil dan mengurutkan daftar file yang cocok.
tripleee
30

dengan perintah "rename"

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

atau

rename -N 0001 's/.*/$N.jpg/' *.jpg
Roman Rhrn Nesterov
sumber
32
My rename(Linux Mint 13) tidak memiliki -Nopsi.
Luke H
Saya dapat mengungguli hanya karena penyebutan perintah ganti nama, saya belum pernah mendengarnya
user907860
8
Saya tertarik mengetahui di mana orang mendapat perintah ganti nama dengan opsi -N. Ubuntu 14.04 saya tidak memilikinya.
Stephan Henningsen
1
Saya suka renameperintah itu, tetapi saya tidak pernah tahu -N! Terima kasih!
Dan Lecocq
1
Ada setidaknya tiga alat yang berbeda dikenal sebagairename . Tautan yang diposting oleh @Bostrot adalah alat ganti nama lain dan sepertinya @RomanRhrnNesterov menggunakan yang itu. ¶ Untuk semua pengguna renameoleh Peder Stray dan Larry Wall (paket perl-renamedi linux arch dan paket renamedi debian / ubuntu): Anda dapat mendefinisikan $Ndiri Anda:perl-rename '$N=sprintf("%04d",++$N); s/.*/$N.jpg/' *.jpg
Socowi
30

menggunakan solusi Pero di OSX diperlukan beberapa modifikasi. Saya menggunakan:

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

Catatan: garis miring terbalik ada untuk kelanjutan garis

sunting 20 Juli 2015: memasukkan umpan balik @ klaustopher untuk mengutip \"%s\"argumen dari mvperintah untuk mendukung nama file dengan spasi.

beibei2
sumber
3
Seperti solusi Pero, ada kerentanan keamanan di sini. Pikirkan jika Anda memiliki file bernama $(rm -rf /).jpg.
Charles Duffy
Terima kasih, ini berhasil. Tetapi Anda harus mengutip argumen pertama mv. Jika Anda memiliki file bernama ie some thing.jpgskrip Anda gagal. Inilah yang saya gunakan:find . -name '*.jpg' | awk 'BEGIN{ a=0 }{ printf "mv \"%s"\ wallpaper-%04d.jpg\n", $0, a++ }' | bash
klaustopher
saya mungkin akan menggunakan -maxdepth 1untuk bekerja hanya pada jpg di direktori saat ini, karena lebih baik aman daripada menyesal.
Peter Perháč
Jika Anda memindahkan karakter pipa ke akhir baris sebelumnya, Anda tidak perlu garis miring terbalik.
tripleee
Anda dapat menggunakan ls -1 *.jpgdaripada menemukan, kalau tidak itu tidak akan diurutkan. Atau tambahkan |sort|awk sebelum
JPT
28

Bash one liner yang sangat sederhana yang menjaga ekstensi asli, menambahkan nol di depan, dan juga berfungsi di OSX:

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

Versi sederhana dari http://ubuntuforums.org/showthread.php?t=1355021

Roy Shilkrot
sumber
Persis apa yang saya cari. Saya suka Anda dapat mengatur indeks awal.
Jack Vial
2
Harap dicatat ini tidak akan menjaga urutan asli file.
Roy Shilkrot
@RoyShilkrot Apa yang Anda maksud dengan » tidak akan menjaga urutan asli «? Gumpalan di bash dan shell posix lainnya berkembang dalam urutan diurutkan sesuai dengan sistem lokal. Tentu saja, ini tidak diurutkan 9.extsebelumnya 11.ext, tetapi alat lain (seperti ls) tidak akan melakukannya juga.
Socowi
11

Untuk bekerja dalam semua situasi, beri \ "untuk file yang memiliki ruang dalam nama

find . -name '*.jpg' | gawk 'BEGIN{ a=1 }{ printf "mv \"%s\" %04d.jpg\n", $0, a++ }' | bash
Abdala Cerqueira
sumber
3
Bahkan tidak mencakup semua situasi. Sebuah nama file yang mengandung tanda kutip literal dapat dengan mudah melarikan diri - dan karena Anda menggunakan tanda kutip ganda dan bukan tanda kutip tunggal, ekspansi seperti $(rm -rf /)masih dihormati.
Charles Duffy
11

Jika Anda renametidak mendukung -N, Anda dapat melakukan sesuatu seperti ini:

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

Sunting Untuk mulai dengan angka yang diberikan, Anda dapat menggunakan kode (agak jelek) di bawah ini, cukup ganti 123 dengan nomor yang Anda inginkan:

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

Ini mencantumkan file dalam urutan waktu pembuatan (terbaru lebih dulu, tambahkan -rke ls untuk membalikkan urutan), kemudian mengirimkan daftar file ini untuk mengganti nama. Ganti nama menggunakan kode perl di regex untuk memformat dan menambah penghitung.

Namun, jika Anda berurusan dengan gambar JPEG dengan informasi EXIF, saya akan merekomendasikan exiftool

Ini dari dokumentasi exiftool , di bawah "Mengganti Nama Contoh"

   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
sumber
Bagaimana saya bisa mulai menggunakan nomor tertentu rename?
Jan
6

Di OSX , instal skrip rename dari Homebrew:

brew install rename

Maka Anda dapat melakukannya dengan sangat mudah:

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

Atau untuk menambahkan awalan yang bagus:

rename -e 's/.*/photo-$N.jpg/' *.jpg
trisweb
sumber
3
Itu skrip yang bagus, dan itu hanya tergantung pada Perl. brew hanya berfungsi di mac, tetapi Anda bisa mengambilnya dari github ( github.com/ap/rename ) dan menggunakannya di Linux atau Windows.
Tim Danner
3
ini tidak bekerja untuk saya. Saya mendapatGlobal symbol "$N" requires explicit package name (did you forget to declare "my $N"?) at (user-supplied code).
Anthony Chung
Sebagai pengguna Mac, saya senang melaporkan bahwa aplikasi rename yang ditautkan oleh @TimDanner sangat portabel, semudah mengunduh arsip Zip, menjatuhkan utilitas rename ke direktori yang diatur oleh jalur profil bash saya untuk dilihat. , dan berfungsi langsung dari kotak. Saya terkejut ini tidak tersedia di MacPorts. Saya merasa sangat aneh bahwa saya memiliki halaman manual BSD untuk Rename (2) tetapi ketika menjalankan rename itu akan mengatakan tidak ada perintah. Sosok pergi.
adamlogan
2

Ikuti perintah, ganti nama semua file menjadi berurutan dan juga ekstensi huruf kecil:

rename --counter-format 000001 --lower-case --keep-extension --expr='$_ = "$N" if @EXT' *
OzzyCzech
sumber
1

Saya memiliki masalah yang sama dan menulis skrip shell karena alasan itu. Saya telah memutuskan untuk mempostingnya terlepas bahwa banyak jawaban yang baik telah diposting karena saya pikir itu dapat membantu seseorang. Jangan ragu untuk memperbaikinya!

menghitung

@Gnutt Perilaku yang Anda inginkan dapat dicapai dengan mengetik berikut ini:

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

Jika opsi -rini ditinggalkan, reaming hanya akan disimulasikan (Harus membantu untuk pengujian).

The otion L menjelaskan panjang nomor target (yang akan diisi dengan angka nol di depannya) juga memungkinkan untuk menambahkan awalan / akhiran dengan opsi -p <prefix> -s <suffix>.

Jika seseorang ingin file diurutkan secara numerik sebelum diberi nomor, cukup hapus -o modtimeopsi.

Paul Weibert
sumber
1
a=1

for i in *.jpg; do
 mv -- "$i" "$a.jpg"
 a=`expr $a + 1`
done
Shubh
sumber
1

Mari kita asumsikan kita memiliki file-file ini dalam direktori, terdaftar dalam urutan pembuatan, yang pertama adalah yang tertua:

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

kemudian ls -1crmenampilkan persis daftar di atas. Anda kemudian dapat menggunakan rename:

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

output yang mana

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)

Peringatan "penggunaan nilai yang tidak diinisialisasi [...]" ditampilkan untuk file tanpa ekstensi; Anda bisa mengabaikannya.

Hapus -ndari renameperintah untuk benar-benar menerapkan penggantian nama.

Jawaban ini terinspirasi oleh jawaban Luke pada April 2014 . Ini mengabaikan persyaratan Gnutt untuk mengatur jumlah nol terkemuka tergantung pada jumlah total file.

Michael Schmid
sumber
Ini adalah jawaban yang paling berguna di sini untuk saya, terutama karena saya ingin mengeringkan op sebelum dijalankan, dan juga karena saya bisa menyesuaikan urutan dengan mengubah ls -1tUwaktu pembuatan. Itu juga perlu renamediinstal, yang saya tidak punya.
antonyh
1

Sekali lagi menggunakan solusi Pero dengan sedikit memodifikasi, karena findakan melintasi pohon direktori dalam item pesanan disimpan dalam entri direktori. Ini (sebagian besar) akan konsisten dari menjalankan ke menjalankan, pada mesin yang sama dan pada dasarnya akan menjadi "urutan pembuatan file / direktori" jika belum ada penghapusan.

Namun, dalam beberapa kasus Anda perlu mendapatkan beberapa urutan logis, katakanlah, dengan nama, yang digunakan dalam contoh ini.

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
sumber
3
JANGAN gunakan ini. Mengarahkan kembali ke bash seperti ini adalah risiko keamanan besar. Bagaimana jika salah satu nama file dalam formulir blahblah; rm -r * blahblah.jpg?
xhienne
1

Diurutkan berdasarkan waktu, terbatas pada jpg, nol terkemuka dan nama bas (jika Anda menginginkannya):

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

(semua dalam satu baris, tanpa \)

Frank Nocke
sumber
Dalam skema besar, banyak jawaban di halaman ini mengerikan, jadi mungkin ini tidak pantas untuk downvote. Saya ragu untuk memvotasikan apa pun yang menggunakan lsskrip.
tripleee
Saya menyimpan jawaban ini dari sisi negatif karena walaupun mungkin rapuh, ia bekerja untuk kasus penggunaan khusus yang saya miliki.
Ville
1
ls -1tr | rename -vn 's/.*/our $i;if(!$i){$i=1;} sprintf("%04d.jpg", $i++)/e'

rename -vn - hapus n untuk mode uji off

{$ i = 1;} - kontrol nomor awal

"% 04d.jpg" - kontrol hitung nol 04 dan atur ekstensi keluaran .jpg

maXp
sumber
Memutakhirkan jawaban ini karena hanya menggunakan penggantian nama asli. Kasus penggunaan saya adalah untuk mengganti dua digit file pertama dengan angka mulai dari 01:rename -v -n 's/../our $i;if(!$i){$i=1;} sprintf("%02d", $i++)/e' *
minterior
1

Bagi saya kombinasi jawaban ini bekerja dengan sempurna:

ls -v | gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | bash
  • ls -v membantu memesan 1 10 9 dengan benar: 1 9 10 pesanan, menghindari masalah ekstensi nama file dengan jpg JPG jpeg
  • gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }'nomor baru dengan 4 karakter dan angka nol di depan. Dengan menghindari mv saya tidak sengaja mencoba menimpa apa pun yang sudah ada dengan tidak sengaja memiliki nomor yang sama.
  • bash mengeksekusi

Waspadai apa yang dikatakan @xhienne, mem-pipkan konten yang tidak dikenal ke bash adalah risiko keamanan. Tapi ini tidak terjadi pada saya karena saya menggunakan foto yang dipindai.

nintendojet
sumber
0

Anda juga dapat menggunakan ls

ls *.JPG| awk 'BEGIN{ a=0 }{ printf "mv %s gopro_%04d.jpg\n", $0, a++ }' | bash
bartburkhardt
sumber
5
Lihat mywiki.wooledge.org/ParsingLs , dan juga deskripsi kerentanan keamanan di sisi lain, solusi yang sama-sama rusak.
Charles Duffy
1
JANGAN gunakan ini. Mengarahkan kembali ke bash seperti ini adalah risiko keamanan besar. Bagaimana jika salah satu nama file dalam formulir blahblah; rm -r * blahblah.JPG?
xhienne
0

Sebagian besar solusi lain akan menimpa file yang sudah ada yang dinamai sebagai angka. Ini khususnya masalah jika menjalankan skrip, menambahkan lebih banyak file, dan kemudian menjalankan skrip lagi.

Skrip ini mengganti nama file numerik yang ada terlebih dahulu:

#!/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
sumber
0

Oneliner ini mencantumkan semua file di direktori saat ini, mengurutkan berdasarkan cap waktu pembuatan dalam urutan terbalik (berarti file terlama ada di awal) dan mengganti nama secara otomatis dengan trailing nol seperti yang dipersyaratkan oleh jumlah file. Ekstensi file akan dipertahankan.

Saya biasanya hanya memiliki satu folder sejak bertahun-tahun untuk gambar dan film ponsel. Menerapkan perintah ini, gambar dan film saya siap untuk tayangan slide dalam urutan yang benar di tv atau pengarsipan juga.

Perlu diketahui bahwa jika Anda memiliki tabrakan nama file, Anda kehilangan file. Jadi pertama ganti nama menjadi sesuatu yang aneh seperti temp001.jpgdan kemudian jalankan ke nama file akhir Anda.

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
sumber
1
Berlari lstidak hanya sekali tetapi dua kali sepertinya ini sebaiknya dihindari, tetapi saya belum mempelajarinya secara mendalam.
tripleee
1. Jika saya mengusulkan oneliner dengan sengaja, mengapa Anda mengubahnya setelahnya? Banyak pengguna seperti saya lebih suka menyalin-menempelkan oneliner untuk menyelesaikan tugas. Bagi yang lain lebih suka menyalin baris demi baris, ada jawaban lain di utas ini. 2. Pertanyaan awal adalah "jumlah nol terkemuka tergantung pada jumlah total file" dan ini dilakukan oleh yang pertama ls, jadi itu sebabnya dua dari mereka diperlukan. 3. Perintah semacam itu adalah satu tembakan dan tidak dimaksudkan untuk dimasukkan dalam skrip, jadi ada alasan mengapa orang lebih suka satu kalimat
Flavio Aiello
1
Maaf, tidak menyadari Anda menganggap itu penting. Bagi saya, bisa membaca kode jauh melampaui kemampuan untuk menyalin / menempelkannya sebagai satu baris. Saya belum menemukan lingkungan di mana Bash akan memiliki masalah dengan pasta yang membentang beberapa baris, tetapi saya mungkin mengabaikan sesuatu.
tripleee
0

Inilah yang bekerja untuk saya.
Saya telah menggunakan perintah rename sehingga jika ada file yang mengandung spasi dalam nama itu, perintah mv jangan bingung antara spasi dan file aktual.

Di sini saya mengganti spasi, '' dalam nama file dengan '_' untuk semua file jpg
#! / bin / bash
ganti nama 'y / / _ /' * jpg #replacing spasi dengan _
misalkan x = 0;
untuk saya di * .jpg; lakukan
    misalkan x = (x +1)
    mv $ i $ x.jpg
selesai
rishang bhavsar
sumber
Instal rename di linux (ubuntu), "sudo apt install rename"
rishang bhavsar
0

Saat ini ada opsi setelah Anda memilih beberapa file untuk penggantian nama (saya telah melihat di file manager thunar).

  1. pilih banyak file
  2. periksa opsi
  3. pilih ganti nama

Prompt datang dengan semua file di dir tertentu hanya memeriksa dengan bagian kategori

rudr
sumber
-1

Script ini akan mengurutkan file berdasarkan tanggal pembuatan di bash Mac OS. Saya menggunakannya untuk mengubah nama video secara massal. Cukup ganti ekstensi dan bagian pertama nama.

ls -trU *.mp4| awk 'BEGIN{ a=0 }{ printf "mv %s lecture_%03d.mp4\n", $0, a++ }' | bash
Adam Mendoza
sumber
1
JANGAN gunakan ini. Mengarahkan kembali ke bash seperti ini adalah risiko keamanan besar. Bagaimana jika salah satu nama file dalam formulir blahblah; rm -r * blahblah.mp4?
xhienne
-1

Di sini solusi lain dengan perintah "rename":

find -name 'access.log.*.gz' | sort -Vr | rename 's/(\d+)/$1+1/ge'
panticz
sumber
Untuk mengembalikan nol di depan:rename 's/(\d+)/sprintf("%04d",$1)+1/ge'
Camille Goudeseune
Tidak berfungsi seperti yang diharapkan, untuk folder yang memiliki file dengan nama seperti ini: DSC_3451.JPG, DSC_3452.JPG dll. Cari -name '* .JPG' | sort -Vr | rename 's / (\ d +) / $ 1 + 1 / ge' tidak mengubah apa pun
Tiberiu C.
-2

Jawaban Pero membuat saya di sini :)

Saya ingin mengganti nama file relatif ke waktu karena pemirsa gambar tidak menampilkan gambar dalam urutan waktu.

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
sumber
2
JANGAN gunakan ini. Mengarahkan kembali ke bash seperti ini adalah risiko keamanan besar. Bagaimana jika salah satu nama file dalam formulir blahblah; rm -r * blahblah.jpg? Hanya contoh ekstrem.
xhienne
-2

Jika Anda menggunakan Annotator gambar untuk memberi label pada gambar.

$ make qt5py3

$ python3 labelImg.py

Soumen sinha Mahapatra
sumber
-3

Untuk memberi nomor baru 6000, file dalam satu folder Anda dapat menggunakan opsi 'Ubah nama' dari program ACDsee.

Untuk mendefinisikan awalan, gunakan format ini: ####"*"

Kemudian atur nomor mulai dan tekan Ubah Nama dan program akan mengganti nama semua 6000 file dengan nomor urut.

Rick
sumber
1
OP meminta seperangkat perintah di Unix Bourne Shell. Anda mengusulkan produk komersial yang hanya berjalan di lingkungan Windows.
xhienne