Cara Menggunakan Perintah Ganti Nama di Linux

Pahami file yang mengubah nama pembangkit tenaga listrik dunia Linux dan berikan mv— dan diri Anda sendiri — istirahat. Renamefleksibel, cepat, dan terkadang bahkan lebih mudah. Berikut tutorial untuk pembangkit tenaga perintah ini.

Ada Apa Dengan mv?

Tidak ada yang salah dengan mv. Perintah berfungsi dengan baik, dan ditemukan di semua distribusi Linux, di macOS, dan di sistem operasi mirip Unix lainnya. Jadi itu selalu tersedia. Namun terkadang Anda hanya membutuhkan buldoser, bukan sekop.

The mvperintah memiliki tujuan dalam hidup, dan itu adalah untuk memindahkan file. Ini adalah efek samping yang menyenangkan karena dapat digunakan untuk memindahkan file yang sudah ada ke file baru, dengan nama baru. Efek akhirnya adalah mengganti nama file, jadi kami mendapatkan apa yang kami inginkan. Tapi mvbukan alat ganti nama file khusus.

Mengganti Nama File Tunggal Dengan mv

Digunakan mvuntuk mengganti nama jenis file mv, spasi, nama file, spasi, dan nama baru yang Anda inginkan untuk file tersebut. Lalu tekan Enter.

Anda dapat menggunakan  lsuntuk memeriksa file telah diganti namanya.

mv oldfile.txt newfile.txt
ls * .txt

Mengganti Nama Banyak File dengan mv

Segalanya menjadi lebih rumit ketika Anda ingin mengganti nama banyak file. mvtidak memiliki kemampuan untuk menangani penggantian nama banyak file. Anda harus menggunakan beberapa trik Bash yang bagus. Tidak apa-apa jika Anda mengetahui beberapa fu baris perintah kelas menengah, tetapi kerumitan mengganti nama beberapa file dengan mvberdiri sangat kontras dengan kemudahan menggunakan mvuntuk mengganti nama satu file.

Segalanya meningkat dengan cepat.

Katakanlah kita memiliki direktori dengan berbagai file di dalamnya, dengan tipe yang berbeda. Beberapa dari file ini memiliki ekstensi ".prog". Kami ingin mengganti namanya di baris perintah sehingga memiliki ekstensi ".prg".

Bagaimana kita berselisih mvmelakukannya untuk kita? Mari kita lihat file-nya.

ls * .prog -l

Berikut salah satu cara untuk melakukannya yang tidak menggunakan file skrip Bash yang sebenarnya.

untuk f in * .prog; lakukan mv - "$ f" "$ {f% .prog} .prg"

Apakah pekerjaan itu? Mari kita periksa file dan lihat.

ls * .pr *

Jadi, ya, itu berhasil. Sekarang semuanya adalah file ".prg", dan tidak ada file ".prog" di direktori.

Apa yang baru saja terjadi?

Apa yang sebenarnya dilakukan oleh perintah panjang itu? Mari kita hancurkan.

untuk f in * .prog; lakukan mv - "$ f" "$ {f% .prog} .prg"

Bagian pertama memulai perulangan yang akan memproses setiap file ".prog" di direktori, secara bergantian.

Bagian selanjutnya menjelaskan apa yang akan dilakukan pemrosesan . Ini digunakan  mvuntuk memindahkan setiap file ke file baru. File baru akan diberi nama dengan nama file asli tidak termasuk bagian ".prog". Ekstensi baru dari ".prg" akan digunakan sebagai gantinya.

Harus Ada Cara yang Lebih Sederhana

Pasti. Itu adalah renameperintahnya.

renamebukan bagian dari distribusi Linux standar, jadi Anda harus menginstalnya. Ini juga memiliki nama yang berbeda di keluarga Linux yang berbeda, tetapi semuanya bekerja dengan cara yang sama. Anda hanya perlu mengganti nama perintah yang sesuai sesuai dengan rasa Linux yang Anda gunakan.

di Ubuntu dan distribusi turunan Debian yang Anda instal renameseperti ini:

sudo apt-get install ganti nama

Di distribusi turunan Fedora dan RedHat, Anda menginstal prenameseperti ini. Perhatikan "p" awal, yang merupakan singkatan dari Perl.

sudo dnf install prename

Untuk menginstalnya di Manjaro Linux gunakan perintah berikut. Perhatikan bahwa perintah penggantian nama dipanggil perl-rename.

sudo pacman -Syu perl-rename

Mari Lakukan Itu Lagi

Dan kali ini kami akan menggunakan rename. Kami akan memutar kembali waktu sehingga kami memiliki satu set file ".prog".

ls * .prog

Sekarang mari gunakan perintah berikut untuk mengganti namanya. Kami kemudian akan memeriksa lsapakah itu berhasil. Ingatlah untuk mengganti renamedengan nama perintah yang sesuai untuk Linux Anda jika Anda tidak menggunakan Ubuntu atau Linux turunan Debian.

ganti nama 's / .prog / .prg /' * .prog
ls * .pr *

Berhasil, sekarang semuanya adalah file ".prg", dan tidak ada file ".prog" yang tersisa di direktori.

Apa yang Terjadi Saat Ini?

Mari kita jelaskan sedikit keajaiban itu, dalam tiga bagian.

Bagian pertama adalah nama perintah, rename( prenameatau perl-rename, untuk distribusi lain).

Bagian terakhir adalah *.prog, yang memerintahkan renameuntuk mengoperasikan semua file ".prog".

Bagian tengah mendefinisikan pekerjaan yang ingin kita lakukan pada setiap nama file. The ssarana pengganti. Istilah pertama ( .prog) adalah apa yang renameakan dicari di setiap nama file dan istilah kedua ( .prg) adalah apa yang akan diganti.

Bagian tengah dari perintah, atau ekspresi pusat, adalah 'ekspresi reguler' Perl dan inilah yang memberi renameperintah fleksibilitasnya.

Mengubah Bagian Lain dari Nama File

Kami telah mengubah ekstensi nama file sejauh ini, mari kita ubah bagian lain dari nama file.

Di direktori ada banyak file kode sumber C. Semua nama file diawali dengan "slang_". Kami dapat memeriksa ini dengan ls.

ls sl * .c

Kami akan mengganti semua kemunculan "slang_" dengan "sl_". Format perintahnya sudah tidak asing lagi bagi kita. Kami hanya mengubah istilah pencarian, istilah penggantian, dan jenis file.

ganti nama 's / slang_ / sl_' * .c

Kali ini kami mencari file “.c”, dan mencari “slang_”. Setiap kali "slang_" ditemukan di nama file itu diganti dengan "sl_".

Kita bisa mengecek hasil dari perintah itu dengan mengulang lsperintah dari atas dengan parameter yang sama:

ls sl * .c

Menghapus Bagian dari Nama File

Kami dapat menghapus sebagian dari nama file dengan mengganti istilah pencarian dengan apa pun.

ls * .c
ganti nama 's / sl _ //' * .c
ls * .c

Kita dapat melihat dari lsperintah bahwa file ".c" kita semua diawali dengan "sl_". Mari kita singkirkan itu sama sekali.

The renameperintah mengikuti format yang sama seperti sebelumnya. Kami akan mencari file ".c". Istilah penelusurannya adalah “sl_”, tetapi tidak ada istilah substitusi. Dua garis miring terbalik tanpa apapun di antara keduanya tidak ada artinya, string kosong.

renameakan memproses setiap file ".c" secara bergantian. Ini akan mencari "sl_" di nama file. Jika ditemukan, maka tidak akan ada yang diganti. Dengan kata lain, istilah pencarian dihapus.

Penggunaan kedua dari lsperintah tersebut memastikan bahwa awalan "sl_" telah dihapus dari setiap file ".c".

Batasi Perubahan pada Bagian Tertentu dari Nama File

Mari kita gunakan ls untuk melihat file yang memiliki string "param" di nama filenya. Kemudian kita akan menggunakan renameuntuk mengganti string itu dengan "parameter" string. Kami akan menggunakan lssekali lagi untuk melihat efek renameperintah pada file tersebut.

ls * param *
ganti nama 's / param / parameter' * .c
ls * param *

Empat file ditemukan yang memiliki "param" dalam nama filenya. param.c, param_one.c, dan param_two.c semuanya memiliki “param” di awal namanya. third_param.c memiliki “param” di akhir namanya, tepat sebelum ekstensi.

The renameperintah akan mencari “param” di mana-mana dalam nama file, dan menggantinya dengan “parameter” dalam semua kasus.

Penggunaan kedua dari  lsperintah tersebut menunjukkan kepada kita bahwa itulah yang sebenarnya terjadi. Apakah "param" ada di awal atau di akhir nama file, ini telah diganti dengan "parameter".

Kita bisa menggunakan metakarakter Perl untuk memperbaiki perilaku ekspresi tengah. Metakarakter adalah simbol yang merepresentasikan posisi atau urutan karakter. Misalnya, ^berarti "awal string", $berarti "akhir string", dan .berarti karakter tunggal apa pun (selain karakter baris baru).

Kami akan menggunakan awal dari string metacharacter ( ^) untuk membatasi pencarian kami ke awal nama file.

ls * param * .c
ganti nama 's / ^ parameter / nilai /' * .c
ls * param * .c
Nilai ls * .c

File yang kita ganti namanya sebelumnya terdaftar, dan kita bisa melihat string "parameter" ada di awal tiga nama file dan itu ada di akhir salah satu nama file.

renamePerintah kami menggunakan awal baris  (^) metakarakter sebelum istilah penelusuran "parameter". Ini memberitahu renameuntuk hanya mempertimbangkan istilah pencarian yang telah ditemukan jika berada di awal nama file. String pencarian "parameter" akan diabaikan jika berada di tempat lain dalam nama file.

Memeriksa dengan ls, kita dapat melihat bahwa nama file yang memiliki "parameter" di akhir nama file belum diubah, tetapi tiga nama file yang memiliki "parameter" di awal namanya memiliki string pencarian yang diganti dengan istilah pengganti "nilai."

Kekuatan renamekebohongan ada pada kekuatan Perl. Semua kekuatan Perl siap membantu Anda.

Pencarian Dengan Pengelompokan

renamememiliki lebih banyak trik di lengan bajunya. Mari pertimbangkan kasus di mana Anda mungkin memiliki file dengan string serupa di namanya. Mereka bukanlah string yang persis sama, jadi pencarian dan substitusi sederhana tidak akan berfungsi di sini.

Dalam contoh ini kami gunakan ls untuk memeriksa file mana yang kami miliki yang dimulai dengan "str". Ada dua di antaranya, string.c dan strangle.c. Kita dapat mengganti nama kedua string sekaligus menggunakan teknik yang disebut pengelompokan.

Ekspresi sentral dari renameperintah ini akan mencari string dalam nama file yang memiliki urutan karakter "stri" atau "stra" di mana urutan tersebut segera diikuti oleh "ng". Dengan kata lain, istilah pencarian kita akan mencari "string" dan "strang". Istilah substitusi adalah "bang".

ls str * .c
ganti nama 's / (stri | stra) ng / bang /' * .c
ls ban * .c

Menggunakan  ls kedua kalinya mengonfirmasi bahwa string.c telah menjadi bang.c dan strangle.c sekarang menjadi bangle.c.

Menggunakan Terjemahan Dengan ganti nama

The renameperintah dapat melakukan tindakan pada nama file yang disebut terjemahan. Contoh sederhana dari terjemahan akan memaksa satu set nama file menjadi huruf besar.

Pada renameperintah di bawah, perhatikan bahwa kami tidak menggunakan a s/ untuk memulai ekspresi pusat, yang kami gunakan y/. Ini memberitahu  renamekita tidak melakukan substitusi; kami sedang melakukan terjemahan.

The a-z Istilah adalah ekspresi Perl yang berarti semua karakter huruf kecil di urutan dari a sampai z. Demikian pula, A-Z istilah tersebut mewakili semua huruf besar dalam urutan dari A hingga Z.

Ekspresi sentral dalam perintah ini dapat diparafrasekan sebagai "jika salah satu huruf kecil dari a hingga z ditemukan dalam nama file, gantilah dengan karakter yang sesuai dari urutan karakter huruf besar dari A hingga Z."

Untuk memaksa nama file dari semua file ".prg" menjadi huruf besar, gunakan perintah ini:

ganti nama 'y / az / AZ /' * .prg

ls * .PRG

The lsperintah menunjukkan kepada kita bahwa semua “.PRG” nama file sekarang dalam huruf besar. Faktanya, untuk lebih akuratnya, mereka bukan lagi file ".prg". Itu adalah file ".PRG". Linux peka huruf besar / kecil.

Kita dapat membalikkan perintah terakhir itu dengan membalik posisi a-zdan suku-suku A-Z di ekspresi tengah.

ganti nama 'y / AZ / az /' * .PRG

ls * .prg

Anda (Wo | Do) tidak Belajar Perl dalam Lima Menit

Menguasai Perl adalah menghabiskan waktu dengan baik. Tetapi untuk mulai menggunakan kapabilitas penghemat waktu dari renameperintah, Anda tidak perlu memiliki banyak pengetahuan Perl sama sekali untuk mendapatkan keuntungan besar dalam hal daya, kesederhanaan, dan waktu.