GNU/Linux >> Belajar Linux >  >> Linux

Menggabungkan Folder Dengan Mv?

Jika saya menggunakan mv untuk memindahkan folder bernama "folder" ke direktori yang sudah berisi "folder" apakah akan digabung atau diganti?

Jawaban yang Diterima:

mv tidak dapat menggabungkan atau menimpa direktori, itu akan gagal dengan pesan “mv:tidak dapat memindahkan 'a' ke 'b':Direktori tidak kosong" , bahkan saat Anda menggunakan --force pilihan.

Anda dapat mengatasinya menggunakan alat lain (seperti rsync , find , atau bahkan cp ), tetapi Anda perlu mempertimbangkan implikasinya dengan cermat:

  • rsync dapat menggabungkan konten dari satu direktori ke direktori lain (idealnya dengan --remove-source-files opsi untuk menghapus hanya file sumber yang berhasil ditransfer dengan aman, dan dengan opsi izin/kepemilikan/pelestarian waktu yang biasa -a jika Anda mau)
    tetapi ini adalah operasi penyalinan penuh, dan oleh karena itu bisa sangat membutuhkan banyak disk.
  • Opsi pilihan saat ini: Anda dapat menggabungkan rsync --link-dest=DIR opsi (untuk membuat hardlink alih-alih menyalin konten file, jika memungkinkan) dan --remove-source-files untuk mendapatkan semantik yang sangat mirip dengan mv biasa .
    Untuk ini, --link-dest perlu diberikan jalur absolut ke sumber direktori (atau jalur relatif dari tujuan ke sumber ).
    tetapi ini menggunakan --link-dest dengan cara yang tidak disengaja (yang mungkin atau mungkin tidak menyebabkan komplikasi), memerlukan pengetahuan (atau menentukan) jalur absolut ke sumber (sebagai argumen untuk --link-dest ), dan sekali lagi meninggalkan struktur direktori kosong untuk dibersihkan sesuai .
  • Anda dapat menggunakan find untuk membuat ulang struktur direktori sumber secara berurutan pada target, lalu pindahkan file sebenarnya satu per satu
    tetapi ini harus berulang melalui sumber beberapa kali dan dapat menghadapi kondisi balapan (direktori baru dibuat di sumber selama proses multi-langkah)
  • cp dapat membuat tautan keras (sederhananya, penunjuk tambahan ke file yang ada yang sama), yang menciptakan hasil yang sangat mirip dengan penggabungan mv (dan sangat IO-efisien karena hanya pointer yang dibuat dan tidak ada data aktual yang harus disalin)
    tetapi ini lagi-lagi mengalami kemungkinan kondisi balapan (file baru di sumbernya dihapus meskipun tidak disalin pada langkah sebelumnya)

Manakah dari solusi ini (jika ada) yang sesuai akan sangat bergantung pada kasus penggunaan spesifik Anda.
Seperti biasa, pikirkan sebelum Anda menjalankan salah satu dari perintah ini, dan buat cadangan.

Terkait:Bagaimana cara mengunduh folder yang lebih besar dari 20GB di Dropbox tanpa akun Pro?

1:Perhatikan bahwa rsync --remove-source-files tidak akan menghapus direktori apa pun, jadi Anda harus melakukan sesuatu seperti find -depth -type d -empty -delete setelah itu untuk menyingkirkan pohon direktori sumber yang kosong.


Linux
  1. Menjalankan Script Dengan “. ” Dan Dengan “sumber”?

  2. File Cat Dengan Direktori?

  3. Menggabungkan 3 Baris Berturut-turut Dengan Swap?

  1. Pertahankan Tanggal Dimodifikasi Pada Direktori / Folder Dengan Rsync?

  2. Memeriksa Ukuran Direktori dengan du Command di Linux

  3. Howto:Pemrograman C dengan Direktori di Linux

  1. Menggunakan –exclude Dengan Perintah Du?

  2. Haruskah saya meletakkan garis miring setelah sumber dan tujuan saat menyalin folder

  3. Direktori perubahan skrip Shell dengan variabel