GNU/Linux >> Belajar Linux >  >> Linux

Mengapa mv tidak dapat menangani keberadaan direktori dengan nama yang sama di tujuan?

mv dan rsync bukanlah program yang serupa. Khususnya, mv sering mencoba untuk sekadar mengganti nama objek. Jika berada dalam sistem file yang sama, konten tidak akan disalin sama sekali.

Jika Anda belum memiliki imperative_PLs/fortran , lalu mv akan mengambil fortran yang ada direktori dan ganti nama ke titik itu di pohon.

Tetapi Anda sudah memiliki direktori (dengan konten) di lokasi tersebut. Karena nama hanya dapat mereferensikan satu objek, direktori yang ada harus dihapus atau diganti namanya. mv menganggap Anda tidak ingin melakukan keduanya dan membatalkan.

rsync alih-alih menyalin file individual dan konten lainnya di dalam fortran dan menempatkannya ke dalam imperative_PLs/fortran yang ada direktori.

Anggap saja sebagai rename sebaliknya, dan perilaku tersebut mungkin tampak lebih dapat dimengerti.


mv sebenarnya adalah rename di bawah penutup.

Jika Anda memindahkan file ke file lain, mv menganggap Anda tahu apa yang Anda lakukan dan menimpa file tujuan.

Jika Anda memindahkan direktori ke direktori lain, mv menganggap Anda ingin mempertahankan nama dasar direktori asli Anda dan membuatnya di direktori target. Jika belum ada direktori dengan nama tersebut di sisi tujuan, atau jika direktori dengan nama tersebut ada tetapi kosong, operasi berhasil.

Namun, jika direktori target sudah ada dan tidak kosong, ini bukan lagi sebuah rename tetapi itu harus berupa penghapusan file dan direktori rekursif. rename tidak dirancang untuk melakukannya sehingga gagal, mv tidak melangkah lebih jauh karena menganggap Anda tidak ingin melakukannya dan juga gagal.


  1. mv tidak bekerja dalam kasus ini karena tidak dirancang untuk melakukannya. Panggilan sistem (mungkin) juga

    • Pindah ke sistem file yang sama:rename (awalnya link dan unlink )
    • Pindah lintas sistem file:penyalinan file rekursif diikuti dengan unlink rekursif
  2. Opini:Saya pikir itu tidak terlalu dirancang bukan berfungsi, karena tidak dirancang untuk menangani kasus penggunaan ini. Untuk alat "sederhana" yang dimaksudkan untuk melakukan satu hal dengan baik, Anda perlu menyediakan satu set sakelar untuk menunjukkan mv jalur tindakan mana yang harus diambil:

    • Untuk menebus kesalahan, seperti dalam implementasi saat ini
    • Untuk menggabungkan, bailing dengan error jika file sudah ada
    • Untuk menggabungkan, mengganti file target yang sudah ada

Jika tindakan menggabungkan/mengganti adalah yang Anda inginkan, Anda dapat mengimplementasikannya dengan cukup mudah dengan cp diikuti oleh rm , atau dengan menggunakan salah satu utilitas penyalinan struktur file tar , pax , dll.


Linux
  1. Mengapa Perintah Ls Lambat Mengganggu Di Direktori Nfs Dengan Banyak File?

  2. Menggunakan –exclude Dengan Perintah Du?

  3. Mengapa Saya Bisa Masuk Dengan Kata Sandi Sebagian??

  1. Bagaimana cara saya melakukan gunzip ke direktori tujuan yang berbeda?

  2. Bisakah saya mengganti nama file dalam direktori dengan Vim?

  3. Bisakah Linux menangani tampilan resolusi sangat tinggi?

  1. Mengapa Rm Dapat Menghapus File Read-only?

  2. Mengapa nama pengguna Linux tidak boleh dimulai dengan angka?

  3. ssh - mengapa saya bisa masuk dengan kata sandi parsial?