Bagaimana cara memindahkan angka dalam nama file, dalam operasi penggantian nama batch?

13

Saya telah mencoba mencari cara untuk mengganti nama file selama beberapa jam terakhir.

Saya memiliki 2000 file yang seperti ini:

file.1.pdb
file.2.pdb
file.3.pdb

Saya ingin mengubah nama file-file ini menjadi seperti:

file.pdb.1
file.pdb.2
file.pdb.3
pengguna812758
sumber
Bukankah maksudmu bash ?
avazula
4
@avazula Tidak, harap baca artikel ini: en.wikipedia.org/wiki/Batch_renaming
Ali Razmdideh
@ Unggluck ya;)
Ali Razmdideh
2
Hai para pemilih dekat - apakah Anda semua benar-benar berpikir kita hanya perlu satu pertanyaan dalam tag [nama-batch]? Apakah ada sesuatu di pos tertaut yang benar-benar membantu tugas dalam pertanyaan ini, kecuali gagasan untuk menggunakan rename? Sepertinya saya bahwa jika sebuah pertanyaan penggantian nama batch memiliki detail spesifik, kita hanya perlu memberikan jawaban spesifik untuk itu.
Zanna

Jawaban:

15

Jika sudah renamemenginstal, Anda bisa menggunakan

rename -n 's/(\.\d+)\.pdb$/.pdb$1/' *.pdb   # just watch what WOULD happen
rename    's/(\.\d+)\.pdb$/.pdb$1/' *.pdb   # actually rename the files

Perintah renamedapat diinstal melalui

sudo apt install rename
PerlDuck
sumber
11

Melalui mmv(mengubah nama banyak file dengan pola wildcard) itu mudah:

mmv '*.*.*' '#1.#3.#2' *.pdb

atau zmvdari zshkulit; itu adalah modul yang memungkinkan untuk melakukan rename; lihat ZMV-Contoh :

zmv -w '*.*.*' '$1.$3.$2' *.pdb
αғsнιη
sumber
3
Keduanya mmvdan zmvtampak agak eksotis bagi saya. Apakah Anda keberatan menjelaskan sedikit tentang apa itu dan apa yang mereka lakukan?
PerlDuck
2
Saya menambahkan tautan ke halaman dan contoh mereka.
αғsнιη
mmvcukup keren. Tampaknya lebih cocok untuk penggantian nama seperti ini daripada rename, meskipun kurang fleksibel dalam hal pencocokan nama.
JAB
11

Menggunakan Perl rename:

rename -n 's/(\.\d+)(\.pdb)/$2$1/' *.pdb

Penjelasan cepat:

  • *.pdb Cocokkan semua file yang diakhiri dengan .pdb . (Dilakukan oleh shell)
  • (\.\d+)Cocokkan satu titik literal, lalu satu atau lebih digit desimal. Parens membuat grup pertandingan.
  • $2$1 Membalikkan grup pertandingan pertama dan kedua.
  • -nTidak ada tindakan (simulasikan). Jika output terlihat bagus, jalankan perintah lagi tanpa tanda ini.
wjandrea
sumber
1
LOL. Pikiran yang sama. Anda 48 detik lebih cepat.
PerlDuck
1
@PerlDuck Lol, yeah, pikiran yang sama. Jawabannya juga cukup lengkap: Anda meng-install instalasi, saya membahas sintaks.
wjandrea
7

Anda dapat menggunakan skrip ini:

for i in `seq 1 2000`; do
mv file.$i.pdb file.pdb.$i
done

Atau perintah salin-tempel ramah ini:

for i in `seq 1 2000`; do mv file.$i.pdb file.pdb.$i; done

Untuk menggunakan perintah di atas, letakkan semua 2000 file dalam satu folder dan kemudian buka terminal di direktori itu, kemudian jalankan perintah di atas di dalamnya.

Ali Razmdideh
sumber
5

Baru-baru ini nautilus, manajer file default, menerima dialog penggantian nama batch. Belum cukup kuat untuk melakukan apa yang Anda inginkan. Tapi untungnya ada thunar, file manager alternatif yang bisa diinstal. Dengan dialog ganti nama thunars Anda dapat melakukan apa yang Anda inginkan menggunakan GUI.

Pertama instal thunar:

sudo apt install thunar

Mulai thunar, arahkan ke direktori yang memiliki file Anda. Kemudian pilih semuanya. Tekan F2.

Dalam dialog yang terbuka, sekali lagi, pilih semua file. Ubah mode menjadi "Cari & Ganti" dan menjadi "Nama & Sufiks". Periksa "Ekspresi Reguler". Sekarang gunakan yang berikut ini sebagai pencarian dan ganti pola:

file\.(.+)\.pdb

dan

file.pdb.$1

Terakhir, klik tombol ganti nama.

Keuntungan dari cara ini adalah Anda mendapatkan pratinjau visual tentang apa yang akan terjadi sebelum Anda benar-benar melakukan penggantian nama.

dialog ganti nama bulan

Sebastian Stark
sumber
1
Anda dapat membuat sebagian besar program mencetak pesan bahasa Inggris dengan mengawali perintah dengan LC_MESSAGES=POSIX, misalnya LC_MESSAGES=POSIX free. Bekerja sama untuk aplikasi grafis walaupun dalam kasus aplikasi persisten seperti Nautilus dalam konfigurasi default, Anda harus mengakhiri instance sebelumnya dengan nautilus -qterlebih dahulu.
David Foerster
@DavidFoerster terima kasih telah menyebutkan, gambar diganti.
Sebastian Stark
3

Anda dapat menggunakan renamedari util-linuxuntuk ini (perintah ini dipanggil rename.uldi ubuntu):

rename.ul .pdb '' *
rename.ul "file." "file.pdb." *

Ini pertama-tama menghapus .pdbekstensi dari ujung dan kemudian memasukkan kembali ke tengah.

pengguna812791
sumber
1
Cukup keren. Saya tidak menyadarinya rename.ul. Sintaksnya sedikit, um, tidak terduga, tetapi sebenarnya berfungsi seperti cara Anda beriklan. Plus: ini juga memiliki -nsaklar (jangan sentuh, katakan saja).
PerlDuck