Dalam lingkungan GUI, drag-and-drop dengan replace akan mengganti file dan seluruh direktori (termasuk konten) dengan apa pun yang sedang disalin. Apakah ada cara untuk mencapai hasil intuitif yang sama dengan perintah 'mv'?
Dalam lingkungan GUI, drag-and-drop dengan replace akan mengganti file dan seluruh direktori (termasuk konten) dengan apa pun yang sedang disalin. Apakah ada cara untuk mencapai hasil intuitif yang sama dengan perintah 'mv'?
Jawaban:
Tidak dengan mv
.
Fungsi inti dari mv
(meskipun namanya) adalah untuk mengubah nama objek. Salah satu jaminan yang dibuat oleh UNIX adalah bahwa penggantian nama bersifat atomik - Anda tidak pernah diizinkan melihat penggantian nama yang diselesaikan sebagian. Jaminan ini bisa sangat berguna jika Anda ingin mengubah file ( /etc/passwd
, misalnya) yang mungkin dilihat oleh program lain, dan Anda ingin mereka melihat versi file lama atau baru, dan tidak ada kemungkinan lain . Tetapi "penggantian nama rekursif" seperti yang Anda gambarkan akan mematahkan jaminan itu - Anda bisa menghentikannya di tengah dan Anda akan memiliki pohon setengah bergerak dan mungkin berantakan - sehingga tidak benar-benar cocok dengan filosofi dari mv
. Itu dugaan saya mengapa mv -r
tidak ada.
(Jangan pedulikan mv
filosofi itu dengan cara lain yang lebih kecil. Misalnya, mv
sebenarnya cp
diikuti oleh rm
ketika memindahkan file dari satu sistem file ke yang lain.)
Filosofi yang cukup. Jika Anda ingin memindahkan pohon ("drag-drop") secara rekursif dari satu tempat ke tempat lain di sistem file yang sama , Anda bisa mendapatkan efisiensi dan kecepatan mv
sebagai berikut (misalnya):
cp -al source/* dest/ && rm -r source/*
Tanda -l
untuk cp
berarti "membuat tautan keras alih-alih menyalin" - secara efektif membuat nama file baru yang menunjuk ke data file yang sama dengan nama file lama. Ini hanya bekerja pada sistem berkas yang mendukung tautan keras, jadi - sehingga sistem berkas asli UNIX-ish baik-baik saja, tetapi tidak akan bekerja dengan FAT.
The &&
berarti "hanya menjalankan perintah berikut jika perintah sebelumnya berhasil". Jika suka, Anda dapat menjalankan dua perintah satu per satu sebagai gantinya.
Saya tidak berpikir Anda bisa meniru perilaku drag-drop yang Anda gambarkan mv
, karena subdirektori tidak kosong di target tidak akan diganti.
Mungkin rsync
? Sesuatu seperti rsync -a -r source/ target/
? Jalankan dengan -v -n
melakukan dry-menjalankan verbose terlebih dahulu untuk memastikan itu melakukan apa yang Anda inginkan.
Anda mungkin ingin mengubah jawaban yang benar untuk ini:
https://github.com/iaindooley/pickdrop
Contoh:
katakan saya punya:
test/
test/index.php
test/images/
test/images/a.jpg
test/images/thing.png
dan saya ingin memindahkan hal-hal ini ke / situs
jadi sepertinya:
site/
site/public/
site/public/index.php
site/public/a.jpg
site/public/thing.png
Saya bisa pergi:
cd images &&
pick a.jpg thing.png
cd .. &&
pick index.php &&
cd .. &&
mkdir site &&
mkdir site/public &&
cd site/public &&
drop
Ini benar-benar dipotong & tempel.