Почему действительно 'находит - удаляют', удаляют все файлы в каталоге рекурсивно

Можно сказать, являетесь ли Вы в использовании оболочки входа в систему shopt:

dennis@lightning:~$ shopt login_shell
login_shell     off

Что касается преимуществ: войдите в систему оболочки обычно делают немного больше инициализации (такой как установка переменных среды и cd'ing в $HOME), которые не необходимы для других оболочек. С другой стороны, по умолчанию любая оболочка, запущенная от gui, не является оболочкой входа в систему, таким образом, большинство людей настраивает свою оболочку initscripts (~/.bashrc и т.д.), чтобы сделать всю инициализацию и для оболочек входа в систему и для невхода в систему.

15
17.08.2014, 17:03
2 ответа

Командная строка find сделана из разных видов опций, которые объединены в выражения.

Опция find -delete является действием.
Это значит, что он выполняется для каждого файла, который пока что совпадает.
Как первый вариант после путей, все файлы совпадают... ой!

Это опасно - но на man-странице, по крайней мере, есть большое предупреждение :

Из man find:

ACTIONS
    -delete
           Delete  files; true if removal succeeded.  If the removal failed, an
           error message is issued.  If -delete fails, find's exit status  will
           be nonzero (when it eventually exits).  Use of -delete automatically
           turns on the -depth option.

           Warnings: Don't forget that the find command line is evaluated as an
           expression,  so  putting  -delete first will make find try to delete
           everything below the starting points you specified.  When testing  a
           find  command  line  that  you later intend to use with -delete, you
           should explicitly specify -depth in order to avoid later  surprises.
           Because  -delete  implies -depth, you cannot usefully use -prune and
           -delete together.


From further up in man find:

EXPRESSIONS
    The expression is made up of options (which affect overall operation rather
    than  the  processing  of  a  specific file, and always return true), tests
    (which return a true or false value), and actions (which have side  effects
    and  return  a  true  or false value), all separated by operators.  -and is
    assumed where the operator is omitted.

    If the expression contains no actions other than  -prune,  -print  is  per‐
    formed on all files for which the expression is true.


On trying out what a find command will do:

Чтобы посмотреть, что удалит такая команда, как

find . -name '*ar' -delete

, можно сначала заменить действие -удалить на более безобидное действие - например, -fls или -печать:

find . -name '*ar' -print

Это напечатает, на какие файлы повлияет данное действие.
В данном примере -print можно пропустить. В этом случае никакого действия не происходит, поэтому самое очевидное добавляется неявно: -print. (См. второй абзац раздела "ВЫРАЖЕНИЯ", цитируемого выше)

.
14
27.01.2020, 19:49

В найти аргументы порядок вещей, много.

Аргументами могут быть опции, тесты и действия. Обычно сначала нужно использовать опции, затем тесты, затем действия.

Иногда find даже предупреждает о возможном неправильном порядке (например, когда после других аргументов используется -maxdepth), а в других кажется, что это не так.

Что find . -удаляет - имя '*ar' делает так:

  1. Находит файлы и каталоги по текущей директории.
  2. Удаляет их ВСЕ, как они найдены!
  3. Затем видит, что они названы как '*ar' (эта часть сейчас не имеет никакого эффекта).

Вероятно, вы захотите:

find -name '*ar' -delete

Для каждого файла посмотрите, совпадает ли он с '*ar', и только если он удовлетворяет условию, он удалит файл.

Извините, если вы узнали слишком поздно.

9
27.01.2020, 19:49

Теги

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