Как смонтировать каталог, а затем удалить оригиналы, включая каталог?

Я пытаюсь tar собирать файлы в каталоге с именем 'my_directory' и удалять оригиналы с помощью команды:

tar -cvf files.tar my_directory --remove-files

Однако он удаляет только отдельные файлы внутри каталога, а не сам каталог (это то, что я указал в команде). Что мне здесь не хватает?

EDIT:

Да, я полагаю, что опция remove-files довольно буквальна. Хотя я тоже нашел, что эта страница человека неясна в этом вопросе. (В Linux я, как правило, не очень различаю много между каталогами и файлами, и иногда забываю, что они не одно и то же). Похоже, консенсус в том, что он не удаляет каталоги.

Тем не менее, моя основная подсказка для этого вопроса связана с обработкой абсолютными путями tar. Поскольку вы должны указывать относительный путь к сжатому файлу /s, вы должны, следовательно, перейти в родительский каталог, чтобы он был правильно настроен. Поскольку я вижу, что использование какой-либо последующей команды «rm» потенциально опасно в этой ситуации. Таким образом, я надеялся упростить все, сделав сам tar. Удалите.

Например, представьте себе сценарий резервного копирования, в котором каталог для резервного копирования (то есть tar) включен как переменная оболочки. Если значение переменной оболочки было плохо введено, возможно, что результатом могут быть удаленные файлы из любой папки, в которой вы оказались последним.

27 голосов | спросил Nicholas 17 Jpm1000000pmSun, 17 Jan 2010 14:25:07 +030010 2010, 14:25:07

5 ответов


10

Вам не хватает части, в которой говорится, что параметр --remove-files удаляет файлы после добавления их в архив.

Вы можете выполнить операцию архивирования и удаления файлов с помощью команды like,

  

find /path /to /be /archived /-depth-type d -empty -exec rmdir {} \;


Обновление: вам может быть интересно прочитать это короткое обсуждение Debian,
Ошибка 424692 : --remove-файлы жалуются, что каталоги «изменились по мере их чтения» .

ответил nik 17 Jpm1000000pmSun, 17 Jan 2010 14:42:11 +030010 2010, 14:42:11
16

Поскольку параметр --remove-files только удаляет файлы , вы можете попробовать

tar -cvf files.tar my_directory && rm -R my_directory

, чтобы каталог удалялся, только если tar возвращает статус выхода 0

ответил pavium 17 Jpm1000000pmSun, 17 Jan 2010 14:58:18 +030010 2010, 14:58:18
5

Вы пытались установить директиву -remove-files после имени архива? Меня устраивает.

tar -cvf files.tar --remove-files my_directory
ответил Robert Grubba 12 32014vEurope/Moscow11bEurope/MoscowWed, 12 Nov 2014 13:15:09 +0300 2014, 13:15:09
1
source={directory argument}

например.

source={FULL ABSOLUTE PATH}/my_directory

parent={parent directory of argument}

например.

parent={ABSOLUTE PATH of 'my_directory'/

logFile={path to a run log that captures status messages}

Затем вы можете выполнить что-то по строкам:

cd ${parent}

tar cvf Tar_File.`date%Y%M%D_%H%M%S` ${source}

if [ $? != 0 ]

then

 echo "Backup FAILED for ${source} at `date` >> ${logFile}

else

 echo "Backup SUCCESS for ${source} at `date` >> ${logFile}

 rm -rf ${source}

fi
ответил shellking 4 +04002010-10-04T23:58:41+04:00312010bEurope/MoscowMon, 04 Oct 2010 23:58:41 +0400 2010, 23:58:41
1

Вероятно, это была ошибка.

В этом случае слово «файл» является двусмысленным. Но поскольку это переключатель командной строки, я бы ожидал, что он будет означать и каталоги, потому что в unix /lnux все это файл, а также каталог. (Другая интерпретация, конечно, также действительна, но нет смысла хранить каталоги в таком случае. Я считаю это неожиданным и запутанным поведением.)

Но я обнаружил, что в gnu tar на некоторых дистрибутивах gnu tar фактически удаляет дерево каталогов. Еще одним признаком того, что сохранение дерева было ошибкой. Или, по крайней мере, некоторое обходное решение, пока они не исправили его.

Это то, что я пробовал на консоли ubuntu 10.04:

mit: /var /tmp $ mkdir tree1
mit: /var /tmp $ mkdir tree1 /sub1
mit: /var /tmp $> Дерево1 /sub1 /file1

mit: /var /tmp $ ls -la
drwxrwxrwt 4 root root 4096 2011-11-14 15:40.
drwxr-xr-x 16 корень root 4096 2011-02-25 03:15 ..
drwxr-xr-x 3 mit mit 4096 2011-11-14 15:40 tree1

mit: /var /tmp $ tar -czf tree1.tar.gz tree1 /--remove-files

# КАК ВЫ МОЖЕТЕ ВИДЕТЬ ДЕРЕВЬЕ СЕЙЧАС:

mit: /var /tmp $ ls -la
drwxrwxrwt 3 root root 4096 2011-11-14 15:41.
drwxr-xr-x 16 корень root 4096 2011-02-25 03:15 ..
-rw-r-r-- 1 mit mit 159 2011-11-14 15:41 tree1.tar.gz


mit: /var /tmp $ tar --version
tar (GNU tar) 1.22
Copyright © 2009 Free Software Foundation, Inc.

Если вы хотите увидеть его на своем компьютере, вставьте его в консоль на свой страх и риск:

tar -version
cd /var /tmp
mkdir -p tree1 /sub1
> Дерево1 /sub1 /file1
tar -czf tree1.tar.gz tree1 /--remove-files
ls -la
ответил mit 14 12011vEurope/Moscow11bEurope/MoscowMon, 14 Nov 2011 17:21:38 +0400 2011, 17:21:38

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132