Что было бы эта команда делать: “найдите.-ls \(шаблон \)”?

Я знаю то, для чего команда находки, но я не могу выяснить, что круглые скобки для. Объясните.

3
задан 7 March 2017 в 06:07

1 ответ

Это - функция find это позволяет Вам собрать в группу различные тесты. Например:

find . \( -name foo -or -name bar -o -name baz \) -size +1M

Круглых скобок нужно оставить (\( и \) вместо ( и )) потому что круглые скобки являются специальными символами для оболочки (они - usied к командам выполнения в подоболочках), таким образом, их нужно оставить, чтобы быть переданными find и не "съеденный" оболочкой.

Команда выше найдет любой файл, имя которого является любым из foo, bar или baz и чей размер> 1M. Теперь, возьмите эту структуру каталогов в качестве примера:

$ ls -lh *
dir1:
total 2.0M
-rw-r--r-- 1 terdon terdon 1.0M Mar  7 01:24 bar
-rw-r--r-- 1 terdon terdon 1.0M Mar  7 01:24 foo

dir2:
total 4.0M
-rw-r--r-- 1 terdon terdon 2.0M Mar  7 01:24 file
-rw-r--r-- 1 terdon terdon 2.0M Mar  7 01:24 foo

Существует два файла, там назвал foo, но только один> 1M в размере. Существует 2 файла, которые являются> 1M в размере, но только один называют foo, bar, или baz. Поэтому я ожидаю, что команда выше только возвратится dir2/foo как, действительно, это делает:

$ find . \( -name foo -or -name bar -o -name baz \) -size +1M
./dir2/foo

Хорошо, но что, если я выполняю его без круглых скобок?

$ find .  -name foo -or -name bar -o -name baz  -size +1M
./dir2/foo
./dir1/bar
./dir1/foo

Это находит меня всеми файлами названный foo, все файлы называют bar и все файлы называют bar чей размер> 1M. Так, bar и foo в dir1 возвращаются даже при том, что их размер <1M.

Так, круглые скобки очень полезны для обработки a find управляйте, чтобы объединил различные наборы тестов. В сочетании с находкой -or, -and и -not операторы, это делает для чрезвычайно мощного инструмента.

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

7
ответ дан 1 December 2019 в 13:23

Другие вопросы по тегам:

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