Come spostare un file senza conservare le autorizzazioni


42

Il problema è che voglio essere in grado di vedere gli errori durante lo spostamento di un file, ma non di vedere errori con il problema delle autorizzazioni. In altre parole: mi interessa se il file non è completamente trasmesso, ma non voglio vedere errori come questo:

mv: impossibile conservare la proprietà di `/home/blah/backup/pgsql.tar.gz ': operazione non consentita

Quindi voglio qualcosa come: mv $backupfile $destination --ignore-permissions.

Il file di backup può variare da 1 MiB a 5 GiB e viene trasferito tramite NFS.


Succede anche sul dispositivo NTFS collegato, ma questo non è l'unico caso. Succede in tutti i casi in cui non si dispone dei diritti per modificare le autorizzazioni o non è possibile (come su NTFS).
Nux,

Questo è utile quando si cerca di spostare i file che in qualche modo non vengono spostati a causa delle autorizzazioni errori (ad esempio perché sono montati sopra cifs).
Sridhar Sarnobat,

Risposte:


56

mvè lo strumento sbagliato per questo lavoro; tu vuoi cpe poi rm. Dato che stai spostando il file in un altro filesystem, questo è esattamente ciò che mvsta facendo dietro le quinte, tranne che mvsta anche cercando di preservare i bit di autorizzazione del file e le informazioni sul proprietario / gruppo. Questo perché mvavrebbe preservato queste informazioni se fosse spostamento di un file all'interno dello stesso file system e mvcerca di comportarsi nello stesso modo in entrambe le situazioni. Dato che non ti interessa conservare i bit di autorizzazione dei file e le informazioni sul proprietario / gruppo, non utilizzare questo strumento. Usa cp --no-preserve=modee rminvece.


5
Grazie, funziona Alla fine ho fatto:, cp --no-preserve=mode,ownership $backupfile $destinationcontrolla il codice di uscita e poi fai rm $backupfilese tutto va bene.
Nux,

22

Quando si sposta un file all'interno dello stesso filesystem, si mvstacca il file dalla sua posizione precedente e lo si collega alla nuova posizione; i metadati come i permessi rimangono gli stessi. Quando si sposta un file in un file system diverso, si mvcopia il file, si tenta di replicare quanti più metadati possibile e si rimuove l'originale.

Poiché ti stai trasferendo in un file system diverso e non vuoi replicare molti metadati, potresti anche copiare il file e rimuovere l'originale.

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

Ciò preserva le autorizzazioni del file in una certa misura (ad es. Leggibilità mondiale, eseguibilità). Il tempo di modifica del file non viene conservato. Con GNUcp , puoi usare l' --preserve=…opzione per controllare quali metadati vengono replicati in modo più fine, ad es --preserve=mode,timestamps.

Puoi anche usare rsynce dire ciò che vuoi preservare. L'opzione -asignifica "preserva la maggior parte dei metadati", che include il proprietario se eseguito solo come root.

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

La rsyncsoluzione funziona in modo eccellente. Avevo faticato a provare a trasferire la mia vecchia installazione di Ubuntu dalla condivisione CIFS. Il mio rsync non ha segnalato un errore nello spostamento del file, ma non lo stava spostando e stava solo segnalando problemi con le autorizzazioni.
Sridhar Sarnobat,

+1 per rsyncsoluzione!
MikeSchinkel
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.