Як перемістити файл без збереження дозволів


42

Проблема в тому, що я хочу бачити помилки під час переміщення файлу, але не бачити помилки з проблемою дозволів. Іншими словами - мені байдуже, якщо файл не передається повністю, але я не хочу бачити такі помилки:

mv: не вдалося зберегти право власності на `/home/blah/backup/pgsql.tar.gz ': Операція заборонена

Так що я хочу що - щось на кшталт: mv $backupfile $destination --ignore-permissions.

Файл резервного копіювання може бути від 1 МіБ до 5 Гб і передається через NFS.


Це трапляється і на підключеному пристрої NTFS, але це не єдиний випадок. Це трапляється у всіх випадках, якщо ви не маєте прав на зміну дозволів або це неможливо (як, наприклад, у NTFS).
Nux

Це корисно при спробі переміщення файлів, які якимось чином не переміщуються через помилки дозволів (наприклад, через те, що вони встановлені cifs).
Шрідхар Сарнобат

Відповіді:


56

mvє неправильним інструментом для цієї роботи; хочеш cpі тоді rm. Оскільки ви переміщуєте файл в іншу файлову систему, це mvвсе одно саме те, що робиться за кадром, за винятком того, що mvтакож намагаються зберегти біти дозволу на файли та інформацію про власника / групу. Це тому, mvщо зберегла б цю інформацію, якби вона переміщувала файл у межах однієї файлової системи та mvнамагалася вести себе однаково в обох ситуаціях. Оскільки ви не дбаєте про збереження бітів дозволу на файли та інформації про власника / групу, не використовуйте цей інструмент. Використовуйте cp --no-preserve=modeі rmзамість цього.


5
Дякую, це працює. Закінчив робити: cp --no-preserve=mode,ownership $backupfile $destinationперевірити вихідний код, а потім зробити, rm $backupfileякщо все в порядку.
Nux

22

При переміщенні файлу в одній і тій же файловій системі він mvвід'єднує файл зі свого старого місця та приєднує його до нового місця розташування; метадані, такі як дозволи, залишаються тими ж. При переміщенні файлу в іншу файлову систему mvкопіюється файл, намагається повторити якомога більше метаданих та видаляє оригінал.

Оскільки ви переходите до іншої файлової системи і не хочете копіювати багато метаданих, ви також можете скопіювати файл, а потім видалити оригінал.

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

Це певною мірою зберігає дозволи файлу (наприклад, читабельність, виконання). Час модифікації файлу не збережено. За допомогою GNUcp ви можете використовувати --preserve=…опцію, щоб контолювати метадані, які реплікуються більш тонко, наприклад --preserve=mode,timestamps.

Ви також можете використовувати rsyncта розповісти, що ви хочете зберегти. Параметр -aозначає "зберегти більшість метаданих", що включає власника, якщо він працює лише як root.

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

rsyncРішення працює відмінно. Я намагався перенести свою стару установку ubuntu з CIFS. Мій rsync не повідомив про помилку переміщення файлу, але не переміщував його і повідомляв лише про проблеми з дозволами.
Шрідхар Сарнобат

+1 для rsyncрішення!
MikeSchinkel
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.