<Предыдущая | Содержание: | Следующая>
Улучшение эффективности
Когда -Exec action, он запускает новый экземпляр указанной команды каждый раз, когда обнаруживается соответствующий файл. Бывают случаи, когда мы можем предпочесть объединить все результаты поиска и запустить один экземпляр команды. Например, вместо того, чтобы выполнять такие команды:
ls -l file1
ls -l file2
мы можем предпочесть выполнить их так:
ls -l файл1 файл2
таким образом, команда будет выполняться только один раз, а не несколько раз. Есть два способа сделать это. Традиционный способ, используя внешнюю команду xargs и альтернативным способом, используя новую функцию в найдите сам. Сначала поговорим об альтернативном способе.
Изменяя конечную точку с запятой на знак плюса, мы активируем возможность найдите объединить результаты поиска в список аргументов для однократного выполнения нужной команды. Возвращаясь к нашему примеру, это:
find ~ -type f -name 'foo *' -exec ls -l '{}' ';'
find ~ -type f -name 'foo *' -exec ls -l '{}' ';'
-rwxr-xr-x 1 мне
-rw-r - r-- 1 меня
-rwxr-xr-x 1 мне
-rw-r - r-- 1 меня
мне 224 2007-10-29, 18:44 / home / me / bin / foo
мне 224 2007-10-29, 18:44 / home / me / bin / foo
me
me
0 2016 09:19 /home/me/foo.txt
0 2016 09:19 /home/me/foo.txt
выполнит ls каждый раз при нахождении подходящего файла. Изменив команду на:
найти ~ -type f -name 'foo *' -exec ls -l '{}' +
найти ~ -type f -name 'foo *' -exec ls -l '{}' +
-rwxr-xr-x 1 мне
-rw-r - r-- 1 меня
-rwxr-xr-x 1 мне
-rw-r - r-- 1 меня
мне 224 2007-10-29, 18:44 / home / me / bin / foo
мне 224 2007-10-29, 18:44 / home / me / bin / foo
me
me
0 2016 09:19 /home/me/foo.txt
0 2016 09:19 /home/me/foo.txt
мы получаем те же результаты, но система должна только выполнить ls команду один раз.