Bir dosyayı izinleri korumadan taşıma


42

Sorun şu ki, bir dosyayı taşırken hataları görebilmek istiyorum, ancak izin sorunu olan hataları göremiyorum. Başka bir deyişle - Dosyanın tam olarak iletilmemesine özen gösteriyorum, ancak bunun gibi hataları görmek istemiyorum:

mv: `/home/blah/backup/pgsql.tar.gz 'için sahipliği koruyamadı: İşleme izin verilmedi

Bu yüzden böyle bir şey istiyorum: mv $backupfile $destination --ignore-permissions.

Yedekleme dosyası 1 MiB'den 5 GiB'ye kadar herhangi bir şey olabilir ve NFS'den aktarılır.


Ayrıca bağlı NTFS cihazında da olur, ancak tek durum bu değildir. Her durumda, izinleri değiştirme hakkınız olmadığı ya da mümkün olmadığı (NTFS'de olduğu gibi) gerçekleşir.
Nux

Bu, izin hataları nedeniyle bir şekilde taşınamayan dosyaları taşımaya çalışırken kullanışlıdır (örn cifs. Üzerine yerleştirildiği için ).
Sridhar Sarnobat

Yanıtlar:


56

mvbu iş için yanlış bir araçtır; sen istiyorsan cpsonra rm. Dosyayı başka bir dosya sistemine taşıdığınızdan, bu tam mvda sahne mvizinlerinin arkasında ne yaptığını, bunun dışında dosya izin bitlerini ve sahip / grup bilgilerini korumaya çalışıyor. Bunun nedeni mv, aynı dosya sistemindeki bir dosyayı taşıyorsa ve mvher iki durumda da aynı şekilde davranmaya çalıştığında bu bilgiyi koruyacağıdır . Dosya izin bitlerinin ve sahip / grup bilgilerinin korunmasını umursamadığınız için bu aracı kullanmayın. Kullan cp --no-preserve=modeve rmyerine.


5
Teşekkürler, işe yarıyor. Sona erdi:, cp --no-preserve=mode,ownership $backupfile $destinationçıkış kodunu kontrol edin ve ardından rm $backupfileher şey yolundaysa yapın.
Nux

22

Bir dosyayı aynı dosya sistemi içinde taşıdığınızda mv, dosyayı eski konumundan ayırır ve yeni konumuna ekler; izinler gibi meta veriler aynı kalır. Bir dosyayı farklı bir dosya sistemine taşıdığınızda, dosyayı mvkopyalar, mümkün olduğu kadar çok meta veri kopyalamaya çalışır ve orijinali kaldırır.

Farklı bir dosya sistemine geçtiğinizden ve çok fazla meta veri çoğaltmak istemediğiniz için, dosyayı kopyalayıp orijinali kaldırabilirsiniz.

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

Bu, dosyanın izinlerini bir dereceye kadar korur (örneğin dünyaca okunabilirlik, çalıştırılabilirlik). Dosyanın değişiklik zamanı korunmaz. İle GNUcp , kullanabilirsiniz --preserve=…meta örneğin daha ince çoğaltılır ne contol seçeneği --preserve=mode,timestamps.

Ayrıca rsyncne korumak istediğinizi de kullanabilir ve söyleyebilirsiniz. Bu seçenek -a, yalnızca root olarak çalışıyorsa sahibini içeren “çoğu meta verileri koru” anlamına gelir.

rsync -a --no-owner --no-group --remove-source-files "$backupfile" "$destination"

rsyncÇözelti mükemmel çalışır. Eski ubuntu kurulumumu CIFS paylaşımımdan transfer etmeye çalışıyordum. Benim rsync, dosyayı taşıyamadığını bildirdi, ancak taşıyamadı ve yalnızca izin sorunlarını rapor ediyordu.
Sridhar Sarnobat

rsyncÇözüm için +1 !
MikeSchinkel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.