Cara memindahkan file tanpa mempertahankan izin

42

Masalahnya adalah saya ingin dapat melihat kesalahan saat memindahkan file, tetapi tidak melihat kesalahan dengan masalah izin. Dengan kata lain - Saya peduli jika file tidak sepenuhnya ditransmisikan, tetapi tidak ingin melihat kesalahan seperti ini:

mv: gagal mempertahankan kepemilikan untuk `/home/blah/backup/pgsql.tar.gz ': Operasi tidak diizinkan

Jadi saya ingin sesuatu seperti: mv $backupfile $destination --ignore-permissions.

File cadangan dapat berupa apa saja dari 1 MiB hingga 5 GiB dan ditransfer melalui NFS.

Nux
sumber
Ini terjadi juga pada perangkat NTFS yang terhubung, tetapi ini bukan satu-satunya kasus. Ini terjadi dalam semua kasus jika Anda tidak memiliki hak untuk mengubah izin atau itu tidak mungkin (seperti pada NTFS).
Nux
Ini berguna ketika mencoba untuk memindahkan file yang entah bagaimana tidak dipindahkan karena kesalahan izin (misalnya karena mereka di-mount cifs).
Sridhar Sarnobat

Jawaban:

56

mvadalah alat yang salah untuk pekerjaan ini; Anda inginkan cpdan kemudian rm. Karena Anda memindahkan file ke sistem file lain, inilah sebenarnya yang mvdilakukan di balik layar, kecuali itu mvjuga mencoba mempertahankan bit izin file dan informasi pemilik / grup. Ini karena mvakan menjaga informasi tersebut jika memindahkan file dalam sistem file yang sama dan mvmencoba berperilaku yang sama dalam kedua situasi. Karena Anda tidak peduli dengan pelestarian bit izin file dan informasi pemilik / grup, jangan gunakan alat itu. Gunakan cp --no-preserve=modedan rmsebagai gantinya.

Kyle Jones
sumber
5
Terima kasih, ini berhasil. Akhirnya melakukan cp --no-preserve=mode,ownership $backupfile $destination:, periksa kode keluar dan lakukan rm $backupfilejika semuanya baik-baik saja.
Nux
22

Saat Anda memindahkan file di dalam sistem file yang sama, mvlepaskan file dari lokasi sebelumnya dan lampirkan ke lokasi baru; metadata seperti izin tetap sama. Saat Anda memindahkan file ke sistem file yang berbeda, mvmenyalin file, mencoba mereplikasi sebanyak mungkin metadata, dan menghapus yang asli.

Karena Anda pindah ke sistem file yang berbeda dan Anda tidak ingin mereplikasi banyak metadata, Anda mungkin juga menyalin file kemudian menghapus yang asli.

cp "$backupfile" "$destination" && rm "$backupfile"

Ini mempertahankan izin file sampai batas tertentu (mis. Keterbacaan dunia, kemampuan eksekusi). Waktu modifikasi file tidak disimpan. Dengan GNUcp , Anda dapat menggunakan --preserve=…opsi untuk mengontrol metadata apa yang direplikasi dengan lebih halus, misalnya --preserve=mode,timestamps.

Anda juga dapat menggunakan rsyncdan memberi tahu apa yang ingin Anda pertahankan. Opsi ini -aberarti “pertahankan sebagian besar metadata”, yang mencakup pemilik jika dijalankan sebagai root saja.

rsync -a --no-owner --no-group --remove-source-files "$backupfile" "$destination"
Gilles 'SANGAT berhenti menjadi jahat'
sumber
The rsyncsolusi bekerja sangat baik. Saya telah berjuang keras untuk mentransfer instalasi ubuntu lama saya dari saham CIFS. Rsync saya tidak melaporkan kegagalan untuk memindahkan file, tetapi tidak memindahkannya dan hanya melaporkan masalah izin.
Sridhar Sarnobat
+1 untuk rsyncsolusi!
MikeSchinkel