Saya menggunakan rsync untuk mengambil file penting dari server, kemudian menghapus file dari server begitu saya memilikinya secara lokal. Perintah lengkap yang saya jalankan ada di bawah.
Ini berhasil menghapus file di server sumber, namun direktori kosong masih tetap ada. Saya tidak mendapatkan pesan atau kesalahan. Semua output normal. Mungkin ini adalah fungsi yang dimaksudkan.
Bagaimana saya bisa memberitahu rsync untuk membersihkan semuanya, termasuk direktori?
rsync --progress -vrzh --remove-source-files
Versi 3.0.9 di kedua ujungnya.
Jawaban:
Perilaku
--remove-source-files
yang Anda amati persis seperti yang ditentukan olehman rsync
:Tidak ada perintah khusus untuk menghapus direktori, karena dua diskusi di StackExchange dan ServerFault ini jelas ditampilkan. Solusi yang disarankan adalah mengeluarkan dua perintah terpisah:
Bagian terakhir dari perintah yang disarankan dalam dua posting ini,
yang diperlukan untuk menghapus direktori sumber (sekarang dikosongkan) memiliki formulir ini dalam posting ini karena OP dan jawabannya menggunakan rsync untuk memindahkan sejumlah besar file dalam mesin yang sama. Dalam kasus Anda, Anda harus melakukan ini secara manual.
sumber
rsync --delete
saran adalah berbahaya, karena mengabaikan kemungkinan bahwa rsync itu tidak selesai, atau ada file baru pada sumbernya. Metode @ slhck difind
bawah ini jauh lebih aman.Halaman buku itu bahkan mengatakan:
Jika Anda ingin menghapus direktori kosong di sumber Anda, jika masih ada file, lakukan:
Tetapi untuk direktori root kosong,
rm -rf <directory>
tentu saja sudah cukup.sumber
find some_dir -depth -type d -empty -not -path some_dir -delete
Menggunakan " rm -rf " memiliki kondisi ras yang melekat, Anda bisa menghapus file-file yang baru saja dibuat antara rsync dan permintaan rm .
Saya lebih suka menggunakan:
Ini TIDAK akan menghapus direktori jika tidak kosong.
sumber
rm -rf
juga akan menghapus file yang tidak ditransfer karena alasan tertentu.-depth
opsi yang memerintahkanfind
untuk memproses dalam urutan yang benar. Sebagai hasil dari kehilangan ini, direktori yang hanya berisi direktori kosong (mungkin secara rekursif) tidak akan dihapus. Varian oleh @slhck sudah benar.-m, --prune-empty-dirs
pangkas rantai direktori kosong dari daftar file--force
penghapusan paksa dir bahkan jika tidak kosongsumber
Hapus file sumber, lalu hapus direktori agar aman.
sumber