mv: Direktori tidak kosong

155

Saya ingin memindahkan konten direktori dalam direktori lain dengan folder yang sama.

Ini sebuah contoh:

Saya punya ./backupdirektori basedan test. Sekarang saya ingin memindahkan direktori ini ./backupArchives.

Saya menggunakan ini:

mv ./backup/* ./backupArchives

tapi saya mendapat kesalahan

mv: cannot move './backup/base' to './backupsArchive/base': Directory not empty

Saya mencoba menggunakan --force, tetapi tidak berhasil. Apakah ada cara untuk memindahkannya ketika folder sudah ada?

Catatan: Saya hanya ingin menggabungkan konten, tidak ada penulisan ulang.

UdK
sumber
Apakah Anda hanya mencoba menggabungkan konten folder ke tujuan, atau Anda mencoba menimpa apa yang ada di tujuan. (Ini juga membantu jika Anda memiliki SELURUH kesalahan, tanpa menggunakan ...... untuk memotong data)
Thomas Ward
Saya hanya ingin menggabungkan isinya, tidak ada penulisan ulang.
UdK
2
@ UNK Bahkan jika ini akan berhasil, perhatikan bahwa ini tidak akan menggabungkan isi dari dua direktori. Memindahkan direktori akan menggantikan targetnya. Lihat saja rsyncsebagai gantinya, itu akan melakukan penggabungan.
zwets

Jawaban:

188

Meskipun halaman manualnya tidak mendokumentasikannya, mvakan menolak untuk mengganti nama direktori ke direktori lain jika direktori target berisi file. Ini adalah hal yang baik dalam kasus Anda karena Anda ternyata ingin menggabungkan konten sumber ke dalam target, yang mvtidak akan berhasil.

Gunakan rsync -a backup/ backupArchives/sebagai gantinya. Setelah itu rm -rf backup/*.

Alih-alih menggunakan rsync, Anda juga bisa melakukan yang klasik

(cd backup && tar c .) | (cd backupArchives && tar xf -)

yang menghasilkan lebih banyak poin geek.

zwets
sumber
4
hal-hal baik untuk diketahui! Keduanya bekerja dengan baik. Terima kasih!
UdK
5
Poin geek adalah poin terbaik: D
MadMike
2
Perlu dicatat ini mengharuskan Anda memiliki ukuran folder di ruang kosong. Dan akan menimbulkan masalah mengerikan jika tidak.
Pogrindis
4
@ Patogindis Tolong jelaskan masalah mengerikan apa yang akan terjadi, dan bagaimana mereka berbeda dari upaya lain untuk menulis ke disk penuh? Memang, karena kedua operasi menjaga direktori asli tetap utuh, jika operasi gagal Anda hanya rm -rf backupArchivestanpa konsekuensi, apalagi yang 'mengerikan'.
zwets
4
Terima kasih telah menyebutkan pendekatan klasik, sangat membantu jika rsync tidak tersedia! Juga bekerja dengan sudo menggunakansudo sh -c '(cd backup && tar c .) | (cd backupArchives && tar xf -)'
ArendE
39

Cepat dan kotor, jika Anda tahu apa yang Anda lakukan:

cp -r ./backup/* ./backupArchives && rm -R ./backup/*
patrickvacek
sumber
3
Juga berfungsi dalam safe mode saya, genious.
Banned_User
4

Setelah direktori yang Anda pindahkan, Anda perlu *(mewakili teks atau nomor apa saja). Sebagai contoh:

mv /var/www/* /recovery/wwwrecovery/

itu saja, jika Anda memindahkan file, daripada Anda memindahkan sebagai:

mv /var/www/index.php /recovery/index.php

Cara lain adalah mengemas konten folder itu dengan menggunakan tar:

tar -cvzpf backup.tar.gz /var/www 

Kemudian pindahkan file tersebut ke file lainnya. Saya juga merekomendasikan langkah ini karena tar memampatkannya dan membuatnya lebih kecil ukurannya.

Untuk mengekstrak file ke folder lain gunakan

tar -xvzpf /var/www/

Jika Anda perlu menyalin ke lokasi yang bukan milik Anda, pastikan untuk menambahkan dulu perintah Anda dengan sudoperintah setelah opsi apa pun yang Anda putuskan untuk digunakan.

sudo tar -cvzpf backup.tar.gz /var/www/
Dimitris Theodoridis
sumber
Saya menggunakan Ubuntu 12.10 dan saya mendapat: mv: opsi tidak valid - 'R' Coba `mv --help 'untuk informasi lebih lanjut. Memang .tar bagus, tapi saya perlu tahu cara memindahkan file saya untuk situasi ini. Terima kasih atas bantuan Anda
UdK
saya menggunakan desktop dan server 12,04 dan keduanya berfungsi dengan baik. hati-hati, jika Anda tidak membuat ruang antara folfer dan -R. saya juga mencoba tanpa -R bekerja dengan cara yang sama untuk saya, coba tanpa -R, tapi hati-hati dengan ejaan: linux penting huruf kecil dan besar !!! daripada jika jalan tidak bergerak atau bergerak dari lokasi. jika Anda tidak memiliki folder yang ingin Anda pindahkan hanya -C setelah itu dan itu akan membuatnya. coba juga: temukan -inama nama folder Anda dan jalankan perintah ini dari root, hanya untuk melihat apakah ada di tempat lain jika Anda melewatkan sesuatu yang dieja. beri saya perintah persis yang Anda gunakan
Dimitris Theodoridis
what thaaa ..... masukkan nama file itu di antara **
Dimitris Theodoridis
1
Itu -Rpasti tidak seharusnya muncul setelah argumen pertama. Opsi (hampir) selalu mendahului argumen perintah. Juga, mvtidak memiliki -Rpilihan, dan akhirnya, rekursi tidak relevan dengan a mv. @ DimitrisTheodorid silakan uji jawaban Anda terlebih dahulu.
zwets
ya bro saya Anda benar, saya selalu memiliki masalah dengan ejaan saya, dan juga saya punya masalah dengan terminal untuk itu atau perintah tidak ditemukan atau membuat file dan direktori baru yang saya tidak tahu, hanya untuk ejaan bas ... omong-omong saya menggunakan perintah cp, daripada di sini menulis mv teori untuk bro itu: D
Dimitris Theodoridis
4

Tentu rsynctidak berfungsi, tetapi ini mungkin bekerja juga untuk mesin yang tidak mendukung rsync(yaitu di cpanel, yang rsync tidak diinstal secara default).

Bagaimana dengan menggunakan:

cd /path/to/backup/ && cp -R --parents ./* ../backupArchives

Kemudian hapus backupdirektori jika perlu

NOTE1: Anda perlu cdke backupdirektori sebelum mengeksekusicp -R --parents ...

Note2: Periksa backupArchivesdirektori jika Anda mendapatkan file baru dari cadangan.

Atillo Regner Rex
sumber
1

Sebelum mengajukan pertanyaan, mari kita pertimbangkan kasus sederhana.

Misalkan di / home / admin kita memiliki dua folder foodan baryang memiliki struktur subdirektori yang sama, tetapi masing-masing berisi file yang berbeda di dalamnya. Sekarang kami ingin menggabungkan mereka menjadi satu. Ketika kita melakukan hal-hal seperti mv foo/* bar, kesalahan mv: directory not emptyterjadi.

Solusi saya adalah menyerahkan alat baris perintah dan beralih ke pengelola file GUI, misalnya, lumba-lumba. Ketika Anda mengganti nama foomenjadi bardi lumba-lumba, itu memberi Anda opsi untuk menulis ke folder tujuan, dan meminta Anda apakah akan menimpa file yang ada, secara interaktif. Ini menghindari penyalinan dan penghapusan, yang pada dasarnya menghemat waktu Anda tanpa satu baris kode pun.

PS: Saya tidak menguji setiap manajer file di luar sana. Tetapi kebanyakan dari mereka harus memiliki fitur ini.

navigaid
sumber