Bash: найдите с -depth и -prune, чтобы накормить cpio - PullRequest
2 голосов
/ 24 января 2012

Я создаю сценарий резервного копирования, в котором некоторые каталоги не должны включаться в архив резервных копий.

cd /;
find . -maxdepth 2 \ 
    \( -path './sys' -o -path './dev' -o -path './proc' -o -path './media' -o -path './mnt' \) -prune \
-o -print

Находит только те файлы и каталоги, которые мне нужны.

Проблема заключается в том, что cpio следует указывать в следующем параметре, чтобы избежать проблем с разрешениями при восстановлении файлов.

find ... -depth ....

И если я добавлю параметр -depth, возвращаемые файлы и каталоги будут включать те, которые я хочу избежать.

Я действительно не понимаю этих предложений из руководства по поиску:

-prune True;  if  the  file is a directory, do not descend into it. If
              -depth is given, false; no  effect.   Because  -delete  implies
              -depth, you cannot usefully use -prune and -delete together.

1 Ответ

1 голос
/ 24 января 2012

Я цитирую отрывок из этого урока, который может помочь лучше понять -prune вариант find.

Важно понимать, как не допустить, чтобы поиск зашел слишком далеко. Важным вариантом в этом случае является -prune. Эта опция смущает людей, потому что она всегда верна. Это имеет побочный эффект, который важен. Если просматриваемый файл является каталогом, он не будет перемещаться по каталогу. Вот пример, который перечисляет все файлы в каталоге, но не просматривает файлы в подкаталогах верхнего уровня:

find * -type f -print -o -type d -prune

Это распечатает все простые файлы и сократит поиск во всех каталогах. Чтобы распечатать файлы, кроме тех, которые находятся в каталогах управления исходным кодом, используйте:

find . -print -o -name SCCS -prune

Если опция -o исключена, каталог SCCS будет напечатан вместе с другими файлами.

Источник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...