Я пытаюсь tar
собрать коллекцию файлов в каталоге my_directory и удалить оригиналы с помощью команды:
tar -cvf files.tar my_directory --remove-files
Однако это только удаление отдельных файлов внутри каталога, а не самого каталога (это то, что я указал в команде). Что мне здесь не хватает?
РЕДАКТИРОВАТЬ:
Да, я полагаю, опция 'remove-files' довольно буквальная. Хотя я тоже нашел справочную страницу по этому вопросу неясной. (В Linux я не очень сильно различаю каталоги и файлы, и иногда забываю, что это не одно и то же). Похоже, что консенсус в том, что он не удаляет каталоги.
Тем не менее, мой главный побудительный момент для постановки этого вопроса связан с обработкой tar абсолютных путей. Поскольку вы должны указать относительный путь к файлу / файлам, которые нужно сжать, вы должны перейти в родительский каталог, чтобы правильно его смонтировать. Насколько я понимаю, использование любой команды «rm» в этой ситуации потенциально опасно. Таким образом, я надеялся упростить ситуацию, заставив tar самостоятельно выполнить удаление.
Например, представьте сценарий резервного копирования, в котором каталог для резервного копирования (т. Е. Tar) включен в качестве переменной оболочки. Если это значение переменной оболочки было введено неверно, возможно, в результате удастся удалить файлы из любого каталога, в котором вы оказались в прошлом.
Ответы:
Вам не хватает части, которая говорит, что
--remove-files
опция удаляет файлы после добавления их в архив.Вы можете выполнить операцию архивирования и удаления файла с помощью команды вроде:
Обновление: Вас может заинтересовать чтение этого короткого обсуждения Debian,
ошибка 424692: --remove-files жалуется, что каталоги «изменились, когда мы читаем их» .
источник
-c
меняет каталог до того, какtar
начинает свою работу (и вроде не возвращается, пока не выполнит)? Я предполагаю, что он удалил бы подкаталоги, если бы они были включены в архив (но я не проверял это).c'
как-то связано с этим;'remove-files'
намеренно не удаляет каталоги.man
страниц не слишком ясно об этом, но я предполагаю, что вы правы. Тем не менее, я бы не ожидал, что упомянутый каталог-c
будет удален, даже еслиtar
он также удалит каталоги. (Для меня это было бы похоже на удаление текущего каталога, а следовательно, и самого архива, когда он не используется-c
...?) Но если-remove-files
всегда оставлять каталоги на месте, то я, конечно, просто усложняю вещи здесь. ;-)--remove-files
ошибка была исправлена вtar-1.19
.Поскольку
--remove-files
опция удаляет только файлы , вы можете попробоватьтак что каталог удаляется только если
tar
возвращается состояние выхода 0источник
rmdir
удаляет только пустые каталоги. Идея заключалась в том, чтобы удалить каталог и файлы в нем (при условииtar
, успешно)--remove-files
ошибка была исправлена вtar-1.19
.Вы пытались поставить директиву --remove-files после имени архива? Меня устраивает.
источник
--remove-files
до или послеmy_directory
; в обоих случаях каталог удаляется.--remove-files
ошибка была исправлена вtar-1.19
.например
например
Тогда вы можете выполнить что-то вроде:
источник
Вероятно, это была ошибка.
Также слово «файл» в этом случае неоднозначно. Но так как это параметр командной строки, я хотел бы, чтобы он означал также каталоги, потому что в unix / lnux все является файлом, а также каталогом. (Другое толкование, конечно, также справедливо, но нет смысла хранить каталоги в таком случае. Я бы посчитал это неожиданным и запутанным поведением.)
Но я обнаружил, что в некоторых дистрибутивах GNU Tar фактически удаляет дерево каталогов. Еще один признак того, что хранение дерева было ошибкой. Или, по крайней мере, какой-нибудь обходной путь, пока они не исправят это.
Вот что я опробовал на консоли Ubuntu 10.04:
Если вы хотите увидеть его на своем компьютере, вставьте его в консоль на свой страх и риск:
источник