it-swarm-id.com

Mengubah nama file batch

Saya memiliki direktori yang penuh dengan gambar:

image0001.png
image0002.png
image0003.png
...

Dan saya ingin liner satu untuk mengubah nama mereka menjadi (katakanlah).

0001.png
0002.png
0003.png
...

Bagaimana saya melakukan ini?

157
Internet man

Jika Anda menggunakan Bash atau Shell yang kompatibel dengan POSIX:

for f in *.png; do
    mv -- "$f" "${f#image}"
done
110
W_Whalley

Pada Debian dan turunannya, Perl's rename bekerja mirip dengan sed seperti ini:

  rename -v 's/image//' *.png

Ada juga rename dari util-linux yang berfungsi seperti ini, sebagai gantinya:

  rename image '' *.png
113
Internet man

zmv

Shell zsh memiliki perintah pengubahan nama batch yang kuat yang disebut zmv.

Pertama, Anda perlu mengaktifkan perintah zmv sebagai berikut (ini dapat masuk ke ~/.zshrc Anda).

autoload zmv

Sintaks dasarnya adalah zmv PATTERN REPLACEMENT. Polanya adalah ekspresi gumpalan Shell. Bagian dari pola dapat dikelilingi oleh tanda kurung. Teks pengganti dapat berisi $1, $2, Dll. Untuk merujuk ke grup kurung ke-N dalam pola. Sebagai contoh:

zmv 'image(*.png)' '$1'

Anda juga dapat meminta zsh untuk secara otomatis mendefinisikan $1, $2, Dll. Untuk mencocokkan karakter wildcard dalam pola:

zmv -w 'image*.png' '$1.png'

Saya biasanya menggunakan utilitas Nice dan sederhana mmv ( halaman manual ) untuk usecase ini:

$ mmv "image*.png" "#1.png"

akan melakukan tugas Anda.

#1 dalam pola target akan diganti dengan apa pun yang cocok dengan wildcard dalam pola sumber. Ini juga berfungsi untuk beberapa wildcard dan dapat digunakan misalnya untuk mengubah urutan bagian nama file. Anda juga dapat dengan mudah melakukan hal-hal yang lebih rumit seperti mengubah huruf kecil menjadi huruf besar.

Pastikan untuk melindungi pola dari Shell dengan mengutip.

34
Marcel Stimberg

POSIX sh untuk loop

Menggunakan sed untuk mengganti nama

for i in image*jpg
do 
  mv -v "$i" "$(echo "$i" | sed -e 's/^\.\/image//' - )"
done
10
X Tian

Saya suka Perl:

Perl -nlE '$old=$_; s/image//; qx(mv $old $_)'

Anda juga dapat menggunakan pola yang sama untuk tugas lain seperti menyalin file ke direktori lain:

Perl -nlE '$old=$_; s(image)(/path/to/new/dir/); qx(mv $old $_)'
6
gvkv

qmv

Perintah qmv dari renameutils membuka editor yang menampilkan daftar nama file dengan dua kolom, dipisahkan oleh tab. Setiap baris menunjukkan salah satu nama file, sama di kedua kolom. Kolom kanan mewakili nama-nama baru file.
Untuk membuat perubahan, edit nama di sisi kanan. Dalam contoh ini, :%s/... atau mode blok visual sangat membantu.

Nama file di editor Anda

$ qmv *.png

Dalam editor:

image0001.png           image0001.png
image0002.png           image0002.png
image0003.png           image0003.png         
~                                             
~                                             
~                                             
~                                             
"/tmp/user/1000/qmvxWyVMs" 3L, 93C

Edit nama di kolom kanan:
(Menghapus awalan image dari semua baris menggunakan mode blok visual)

image0001.png           0001.png
image0002.png           0002.png
image0003.png           0003.png         
~                                             
~                                             
~                                             
~                                             
:wq

Log penamaan ulang:

image0001.png -> 0001.png
image0002.png -> 0002.png
image0003.png -> 0003.png

(mis. Ubuntu: apt-get install renameutils)

6
Volker Siegel

rekursif

mudah recurse memilih file gambar * png, dan menganggap tidak perlu berurusan dengan baris baru dalam nama file

find . -name "image*.png" | while read f; do mv -v "$f" "$(echo "$f" | sed -e 's/^\.\/image//' - )"; done

Aman, dapat menangani spasi, garis baru, garis miring terbalik, dan hal lainnya:

find . -name "image*.png" | while IFS= read -r f; do 
   mv -v "$f" "$(echo "$f" | sed -e 's/^\.\/image//' - )"; 
done
3
X Tian

Menggunakan ekspansi brace Shell :

for N in {0001..1000}; do mv "{image,}$N.png"; done
2
αғsнιη

Coba brename ( https://github.com/shenwei356/brename ), alat baris perintah lintas platform yang praktis untuk secara batch menamai ulang file/direktori melalui ekspresi reguler (mendukung Windows, Linux dan OS X ).

@ patrickDurusa mengatakan:

Linux memiliki berbagai opsi penggantian nama file batch tetapi saya tidak melihat adanya kekurangan dalam nama file yang muncul pada saya.

Fitur:

  • Lintas-platform . Mendukung Windows, Mac OS X dan Linux.
  • Aman . By memeriksa potensi konflik dan kesalahan.
  • Pemfilteran file . Mendukung termasuk dan tidak termasuk file melalui ekspresi reguler. Tidak perlu menjalankan perintah seperti find ./ -name "*.html" -exec CMD.
  • Mengganti nama kiriman dengan nilai yang sesuai melalui file nilai kunci .
  • Mengganti nama melalui ascending integer .
  • Mengubah nama file dan direktori secara rekursif .
  • Mendukung dry run .
  • Output berwarna-warni .

Perintah:

$ brename -f .png -p image
[INFO] checking: [ ok ] 'image0001.png' -> '0001.png'
[INFO] checking: [ ok ] 'image0002.png' -> '0002.png'
[INFO] checking: [ ok ] 'image0003.png' -> '0003.png'
[INFO] 3 path(s) to be renamed
[INFO] renamed: 'image0001.png' -> '0001.png'
[INFO] renamed: 'image0002.png' -> '0002.png'
[INFO] renamed: 'image0003.png' -> '0003.png'
[INFO] 3 path(s) renamed
1
Wei Shen

POSIX sh menggunakan loop sementara

Membaca nama dari perintah find.

find . -maxdepth 1 -type f -name 'image*png' | while IFS= read -r f; do
  mv -v "$f" "$(echo "$f" | sed -e 's/^\.\/image//' - )"
done

Membaca nama dari file

while IFS= read -r f; do mv -v "$f" "$(echo "$f"|sed -e 's/^\.\/image//' - )"; done < flist
1
X Tian

Untuk Windows dan linux , ini skrip Perl akan dilakukan; pada kasus ini:

$ rnm -l 's/^image//' '*.png'

Script dapat dijalankan secara rekursif di bawah direktori dan bahkan menambahkan jumlah ke semuanya:

$ rnm -r 's/^/$counter./' '/\.png$/'

Karakter UTF-8 juga diperlakukan dengan benar, baik di Windows maupun linux.

1
circulosmeos

Anda dapat menggunakan alat ini: rnm ( halaman web )

Untuk kasus Anda, perintahnya adalah:

rnm -rs '/^image//' *.png

Anda dapat menemukan lebih banyak contoh/dokumen di sini .

0
Jahid