rsync
dapat dibujuk ke folder bergerak sangat mirip dan superior tradisional mv
dengan opsi berikut:
rsync -axvvES --remove-source-files source_directory /destination/
Namun satu hal yang belum bisa saya lakukan adalah menghapus direktori asli. The --remove-source-files
bendera tidak hanya itu, menghapus file sumber, tapi tidak juga direktori sumber. Saya berharap ada --remove-source-directories
bendera juga, tetapi tidak ada.
Bagaimana saya bisa mengatasi ini? Saya kira saya bisa mengeluarkan langkah rm -fr
setelah pindah, tetapi saya lebih suka untuk menjaga prosedur semua dalam satu proses vs memperkenalkan potensi kesalahan.
mv
?find . -type d -empty | xargs rmdir -p
rsync
sesi ke daftar yang kemudian diproses mengikuti proses yang kemudian membersihkannya ... Hmm.Jawaban:
Saya belum menemukan perintah yang melakukan itu sekaligus, tetapi karena rsync masih berkinerja lebih baik daripada
rm -rf
(khususnya jika Anda memiliki banyak direktori), berikut adalah dua perintah rsync yang melakukan "perpindahan" :sumber
Menggunakan " rm -rf " memiliki kondisi ras yang melekat, Anda dapat menghapus file yang baru saja dibuat antara rsync dan permintaan rm .
Saya lebih suka menggunakan:
Ini TIDAK akan menghapus direktori jika tidak kosong.
sumber
-depth
pada OSX atau yang lain.Saya berakhir dalam situasi yang sama. Saya ingin menghindari
rm -rf
, mengetahui bahwa rsync gagal menyalin beberapa file, dan saya tidak ingin kehilangan mereka.Untuk hanya menghapus direktori kosong, saya menemukan ini yang paling nyaman (dari
sourcedir
):sumber
Mengapa tidak menambahkan
rm -rf source_directory
setelah rsync Anda?Setiap program baris perintah (idealy) dibuat untuk melakukan tugas yang ditentukan, dan terserah Anda untuk merekatkan beberapa bersama untuk menyelesaikan tugas yang lebih kompleks.
sumber
find -depth
. Apakah Anda punya saran untuk pendekatan algoritmik cepat untuk turun ke bagian bawah tumpukan stack, mv'ing dengan rsync, rm'ing seperti yang Anda perhatikan, dan kemudian melangkah kembali ke atas pohon?