Perintah mv Linux: pindahkan dan ganti nama file serta direktori
Perintah mv memindahkan file atau direktori dan juga mengganti namanya. Jika tujuan sudah berupa direktori, sumber masuk ke dalamnya dengan nama semula; jika tujuan merupakan nama file yang sudah ada, isinya dapat terganti tanpa masuk tempat sampah.
Contoh-contoh menggunakan perilaku GNU Coreutils. Periksa mv --help, man mv, dan dokumentasi distribusi Anda ketika portabilitas atau opsi spesifik versi menjadi penting.
Apa itu Perintah mv?
Dalam satu sistem file, mv biasanya melakukan penggantian nama yang cepat tanpa menyalin seluruh isi data. Jika batas sistem file membuat operasi nama gagal, GNU beralih ke penyalinan seperti cp -a, lalu menghapus sumber setelah salinan berhasil. Banyak operand tidak membentuk satu transaksi: sebagian dapat selesai sebelum yang lain gagal.
Sintaks Dasar
mv [OPSI]... [-T] SUMBER TUJUAN
mv [OPSI]... SUMBER... DIREKTORI
mv [OPSI]... -t DIREKTORI SUMBER...
Kutip jalur yang mengandung spasi, seperti mv 'laporan awal.txt' 'laporan akhir.txt'. Pada GNU, mv -- -draft.txt final.txt menangani nama yang diawali tanda hubung. Periksa mv --version dan mv --help karena beberapa opsi serta status saat sumber dilewati berbeda antar versi.
Penggunaan Dasar mv
Mengganti nama file
Gunakan direktori latihan baru milik Anda, misalnya masuk dengan cd ke direktori hasil mktemp -d. Siapkan sumber dengan printf 'draf\n' > draft.txt dan pastikan final.txt belum ada jika ingin mengamati penggantian nama tanpa menimpa file lama.
mv draft.txt final.txt
Pindahkan file ke dalam direktori
Pastikan report.pdf sudah ada dan siapkan archive dengan mkdir archive jika belum tersedia. Hasil contoh adalah archive/report.pdf; sumber report.pdf hilang setelah berhasil. Nama tujuan berakhiran garis miring mengharuskan konteks direktori yang sesuai, bukan otomatis membuat induk yang hilang.
mv report.pdf archive/
Pindahkan beberapa file
Siapkan app.log, access.log, dan error.log, lalu buat direktori old-logs. Opsi GNU -t menandai tujuan secara eksplisit; ketiga sumber masing-masing masuk ke dalamnya.
mv -t old-logs -- app.log access.log error.log
Sebagai alternatif, mv -- *.log old-logs/ memakai pola yang diperluas oleh shell. Jangan menjalankan kedua bentuk berurutan pada sumber yang sama tanpa menyiapkannya lagi: pemindahan pertama sudah menghilangkan nama sumber. Pada pengaturan Bash biasa, *.log yang tidak cocok dapat diteruskan secara harfiah dan menyebabkan kesalahan, serta pola itu tidak mencakup nama tersembunyi berawalan titik.
Memeriksa Hasil Memindahkan atau Mengubah Nama
Jika mv berhasil, biasanya tidak menghasilkan output. Setelah mengganti nama, Anda dapat memeriksa apakah jalur asli telah hilang dan jalur baru telah dibuat.
printf 'demo\n' > before.txt &&
mv before.txt after.txt &&
test -f after.txt && test ! -e before.txt
printf '%s\n' "$?"
Dalam direktori latihan yang dapat diakses, keluaran 0 menunjukkan penyiapan, pemindahan, dan kedua pemeriksaan berhasil. Rangkaian && mencegah pemeriksaan nama lama menutupi langkah yang gagal. Uji keberadaan itu tidak memverifikasi seluruh isi atau atribut. Untuk data penting, simpan hash sumber sebelum pemindahan dan bandingkan hasilnya, serta periksa metadata dengan stat untuk mode, pemilik, dan waktu.
Opsi Utama
| Opsi | Tujuan |
|---|---|
-i |
Minta konfirmasi sebelum menimpa. |
-n |
Lewati tujuan yang sudah ada; sumber yang dilewati tetap di tempat semula. |
-f |
Jangan meminta konfirmasi; tidak melewati batas izin atau kendala sistem file. |
-u |
Lewati file bila tujuan memiliki waktu modifikasi sama atau lebih baru; bukan perbandingan isi. |
-v |
Laporkan jalur yang diproses. |
-b |
Cadangkan tujuan yang ada sebelum diganti. |
-T |
Perlakukan tujuan sebagai jalur yang tepat. |
-t DIR |
Tentukan direktori target sebelum sumber. |
Opsi panjang sering membuat skrip yang ditinjau lebih mudah dipahami. Ketika skrip harus dijalankan di sistem non-GNU, periksa setiap opsi non-POSIX pada platform target.
Untuk GNU, hanya opsi terakhir di antara -i, -f, dan -n yang berlaku. Manual GNU saat ini menandai -n sebagai usang karena status berbeda antar platform. Pada versi yang mendukungnya, --update=none melewati tujuan lama tanpa status gagal, sedangkan --update=none-fail memberi diagnostik dan status gagal. Versi lama belum tentu mendukung kedua bentuk itu.
Contoh praktis
Konfirmasi atau cadangkan penggantian
Contoh /etc/myapp/config.conf menggambarkan file konfigurasi yang sudah ada. Direktori induknya dan izin penggantian harus tersedia; untuk latihan, ganti prefiksnya ke direktori milik Anda. Siapkan dua sumber berbeda, new.conf dan replacement.conf, karena sumber dari pemindahan yang berhasil tidak tersedia lagi untuk perintah kedua.
mv -iv new.conf /etc/myapp/config.conf
mv -bv replacement.conf /etc/myapp/config.conf
Baris pertama meminta keputusan jika tujuan ada. Jika penimpaan ditolak, sumber dan tujuan tetap ada; status untuk sumber yang dilewati perlu diperiksa pada implementasi yang dipakai. Baris kedua mencadangkan tujuan sebelum menggantinya. Dengan kontrol cadangan bawaan GNU yang tidak diubah, nama cadangannya biasanya config.conf~; variabel VERSION_CONTROL dan opsi cadangan dapat mengubah pola nama tersebut. Periksa isi cadangan yang benar sebelum memulihkan file.
Buat tujuan tidak ambigu
Siapkan direktori staging dan pastikan current belum ada untuk penggantian nama langsung. Pada contoh kedua, archive harus berupa direktori yang ada dan file1 serta file2 harus masih tersedia sebagai sumber.
mv -T staging current
mv -t archive -- file1 file2
-T mencegah staging dimasukkan sebagai anak current/staging. Jika current sudah berupa direktori kosong, penggantian dapat terjadi; jika direktori itu berisi data, GNU mv tidak menggabungkan kedua pohon dan gagal menggantinya. Opsi ini bukan perintah penghapusan rekursif terhadap direktori tujuan.
Rencanakan pemindahan lintas sistem berkas
Contoh berikut mengasumsikan large-image.raw berada di direktori kerja saat ini dan /mnt/archive merupakan direktori tujuan yang ada pada sistem file yang Anda maksud. Periksa baris sistem file dan ruang tersedia dari df; nama jalur atau direktori /mnt saja tidak membuktikan bahwa batas sistem file berbeda atau perangkat sudah terpasang.
df -h . /mnt/archive/ &&
mv -v large-image.raw /mnt/archive/
GNU mv menghapus sumber secara otomatis setelah penyalinan lintas sistem file berhasil; tidak ada jeda untuk persetujuan verifikasi manual. Jika sumber harus tetap ada sampai isi dan atribut diperiksa, gunakan cp untuk membuat salinan lebih dahulu dalam prosedur terpisah, lalu putuskan penghapusan sumber setelah verifikasi. Pada versi yang mendukungnya, --no-copy dapat menggagalkan pemindahan lintas sistem file alih-alih melakukan salin-hapus; periksa bantuan versi lokal.
Perintah mv dan Perintah Terkait
| Perintah atau metode | Peran utama | Penggunaan yang sesuai |
|---|---|---|
mv |
Pindah atau ganti nama | Jalur sumber harus hilang |
cp |
Buat salinan independen | Baik sumber maupun salinan harus tetap ada |
rename |
Penggantian nama batch berbasis aturan | Mengganti nama banyak file dengan implementasi yang diketahui |
rsync --remove-source-files |
Hapus file sumber yang berhasil diduplikasi pada penerima; tidak menghapus direktori sumber | Transfer terkontrol atas file yang sudah berhenti berubah |
Perhatian Penting
Penimpaan tidak masuk tempat sampah
Penimpaan dapat menghilangkan isi tujuan sebelumnya tanpa entri pada tempat sampah desktop. -f hanya meniadakan pertanyaan, bukan meniadakan pemeriksaan izin. Untuk data penting, tentukan pilihan konfirmasi, tanpa penimpaan, atau cadangan sebelum memindahkan.
Pemindahan antar-sistem berkas dapat berhasil sebagian
Dalam daftar beberapa sumber, item awal mungkin sudah berada pada tujuan ketika item berikutnya gagal. Setelah kesalahan atau gangguan, periksa kedua sisi sebelum mengulang. Peringatan kegagalan mempertahankan atribut tambahan juga perlu dibaca karena tidak semuanya mengubah status keluar GNU mv.
Hindari garis miring di akhir pada sumber symlink direktori
Jika yang ingin dipindahkan adalah tautan simbolik itu sendiri, gunakan namanya tanpa garis miring di akhir, misalnya mv -- tautan-direktori lokasi-baru. Menambahkan garis miring dapat menyebabkan kegagalan pada Linux modern atau perilaku berbeda pada sistem lain. Setelah tautan relatif dipindahkan, targetnya ditafsirkan terhadap direktori tempat tautan baru berada, sehingga hubungan yang sebelumnya valid dapat terputus.
FAQ
Apakah mv menyalin data dalam sistem file yang sama?
Biasanya hanya penggantian nama yang cepat. Menyeberangi batas sistem file dapat memerlukan penyalinan serta penghapusan sumber otomatis, sehingga sifatnya berbeda dari satu operasi nama.
Bagaimana cara menghindari menimpa tujuan?
-i meminta keputusan, sedangkan -n melewati tujuan lama. Pada GNU baru, periksa juga --update=none atau --update=none-fail. Dalam semua kasus, verifikasi sumber yang masih tertinggal dan hasil pada tujuan.
Apakah mengganti nama dan memindahkan memakai sintaks berbeda?
Keduanya menggunakan mv SOURCE DESTINATION; jenis dan lokasi tujuan menentukan hasilnya.
Bagaimana saya bisa dengan jelas memindahkan banyak file ke dalam satu direktori?
Gunakan mv -t DIRECTORY -- FILE....
Dokumentasi resmi
Referensi perintah Linux menurut tugas (bahasa Inggris) memberi konteks perintah pengelolaan file lainnya.




