Поиск в unix, команда find.

Часть1

Программа поиска ‘find’ является одной из самых полезных утилит, всегда находящихся в любой UNIX-системе.

В этой статье я расскажу вам о синтаксисе команды find и продемонстрирую ее применение на нескольких практических примерах.

Сама по себе команда find имеет очень простой синтаксис:

find где_искать ключи

Часть команды которую мы назвали ‘ключи’ на первых порах может показаться вам запутанной. К тому же ее конкретная запись может варьироваться в зависимости от той версии UNIX, которой вы пользуйтесь в данный момент. Если вы работаете на новой для вас системе, то вероятно вам придется заглянуть на страницу руководства посвященную команде find (man find — прим. переводчика). Вот список самых основных ключей, которые вы можете использовать во FreeBSD:

Ключ Назначение
-name искать по имени файла, при использовании подстановочных образцов параметр заключается в кавычки
-type тип искомого: f=файл, d=каталог, l=связь (link)
-user владелец: имя пользователя или UID
-group владелец: группа пользователя или GID
-perm указываются права доступа
-size размер: указывается в 512-байтных блоках или байтах (признак байтов — символ ‘c’ за числом)
-atime время последнего обращения к файлу
-ctime время последнего изменения владельца или прав доступа к файлу
-mtime время последнего изменения файла
-newer искать файлы созданные позже указанной даты
-delete удалять найденные файлы
-ls генерирует вывод как команда ls -dgils
-print показывает на экране найденные файлы
-exec command {} \; выполняет над найденным файлом указанную команду; обратите внимание на синтаксис
-ok перед выполнением команды указанной в -exec, выдает запрос
-depth начинать поиск с самых глубоких уровней вложенности, а не с корня каталога
-prune используется, когда вы хотите исключить из поиска определенные каталоги

Я покажу вам на примерах, как использовать и сочетать эти ключи при поиске. Однако перед этим давайте поглядим для чего может использоваться команда find. Если вы воспользуйтесь для этого командой whatis, то результат ее работы может вас удивить:

whatis findfind(1) -- walk a file hierarchy (обход иерархии файлов)

В двух словах, команда find предназначена для рекурсивного поиска в каталогах различных файлов, отбирая их по указанным вами ключам. На первый взгляд это может показаться небольшим достижением, однако не следует забывать, что большая часть UNIX-утилит не может ‘прогуляться’ по каталогу и всем его подкаталогам. Поэтому эта способность может быть крайне полезна, так как find может не только находить различные файлы, но и проводить над ними разнообразные операции.

Давайте начнем с нескольких простых примеров, для того что бы потом перейти к более сложным. Самый простой поиск вы можете провести напечатав следующее:

find . -print

Поскольку символ точки ‘.’ означает текущий каталог, то эта команда найдет и напечатает (-print) на терминале все файлы находящиеся в текущем каталоге, а так же во всех подкаталогах.

В FreeBSD ключ ‘-print’ подразумевается по умолчанию, так что даже если вы забудете его написать, вы получите такой же результат:

find .

Однако будет правильнее, если вы выработаете в себе привычку писать ‘-print’, так как на многих UNIX-системах ‘-print’ не является подразумеваемым выражением.

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

cdfind . -print

Команда cd выполненная без параметров вернет вас в ваш домашний каталог. Поскольку команда find может использоваться для выполнения серьезных действий со значительными последствиями, всегда будет правильным сначала перейти в тот каталог, в котором вы хотите производить эти действия. В этой статье я подразумеваю, что вы находитесь в вашем домашнем каталоге. Итак, что бы выполняемые действия не нанесли необратимых изменений в вашей системе, не покидайте домашний каталог.

Приведенные примеры показали как просто использовать команду find. Однако скорее всего вы хотите найти нечто конкретное, когда обращаетесь к find. С этого места в игру вступают другие ключи команды find. Попробуем найти файл по его имени:

touch file1find . -name file1 -print

./file1

Давайте разберемся, что я сейчас сделал. Я создал пустой файл с именем file1 при помощи команды touch. Затем я приказал find поискать в моем текущем каталоге (‘.’) файл с именем (‘-name’) file1 и напечатать (‘-print’) результат поиска на экране. Теперь я могу сказать, что в моем домашнем каталоге и содержащихся в нем подкаталогах, есть лишь один файл с именем file1, так как команда find выдала одну строку с именем найденного файла.

Обычно, мы прибегаем к помощи команды find, когда нам необходимо найти более одного файла. Например вам может понадобиться найти все файлы с определенным расширением. Я имею привычку скачивать большое количество pdf-файлов и, при этом, часто забываю сохранять их в каком-то определенном месте. Иногда я складываю эти файлы в каталог с названием pdfs. Когда меня посещает такое желание, я использую команду find для поиска pdf-файлов во всех подкаталогах моего домашнего каталога:

find . -name "*.pdf" -print./pdfs/50130201a.pdf

./pdfs/50130201b.pdf

./pdfs/50130201c.pdf

./pdfs/IWARLab.pdf

./pdfs/DoS_trends.pdf

./pdfs/Firewall-Guide.pdf

./2000_ports.pdf

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

Заметьте, что для того что бы команда find работала, я заключил образец *.pdf в кавычки, написав «*.pdf», а не просто *.pdf. Существуют еще два способа правильного написания образцов. Эти две команды дадут одинаковый результат:

find . -name *.pdf -printfind . -name '*.pdf' -print

Давайте добавлять к этой команде другие команды и смотреть, что в результате получится. Что если нас интересуют только те файлы, которые находятся не в каталоге pdfs? Давайте повторим команду find, но в данном случае переправим ее вывод команде grep, в результате чего мы получим только одно имя:

find . -name "*.pdf" -print | grep -v "^./pdfs/"./2000_ports.pdf

Отлично, команда работает, однако ее синтаксис выглядит устрашающе. Разберем его по частям. Когда вы используете grep -v, вы создаете инвертированный фильтр. Это значит, что grep будет выбирать из входного потока все строки, в которых НЕ содержится указанный образец. В моем случае, меня не интересуют файлы, которые находятся в каталоге ./pdfs/, я исключаю их используя инверсный фильтр. Обратите внимание, что выражение записано в кавычках. Я так же добавил в фильтр параметр ^\. Символ степени ‘^’ говорит команде grep, что образец надо сравнивать только с началом строки. Обратный слеш ‘\’ нужен для того, что бы команда grep не воспринимала точку ‘.’ как специальный символ. Сложенный вместе, такой образец скажет команде grep, показать мне файлы которые не лежат в каталоге ./pdfs/. Вот таким образом я почил желаемый результат.

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

find . -name "*.pdf" -print | grep -v "^./pdfs/" | xargs -J X mv X ./pdfs/

Для того что бы убедиться в том, что это сработало, выполним первоначальную команду find:

find . -name "*.pdf" -print./pdfs/50130201a.pdf

./pdfs/50130201b.pdf

./pdfs/50130201c.pdf

./pdfs/IWARLab.pdf

./pdfs/DoS_trends.pdf

./pdfs/Firewall-Guide.pdf

./pdfs/2000_ports.pdf

Посмотрим, каким образом работает эта конструкция. В то время как grep заканчивает фильтрацию вывода команды find, мы передаем результаты его работы команде xargs, для завершения операции. Ключ J говорит xargs взять все полученные строки и подставить их в указанную команду. Например перед вызовом команды find я не знал сколько файлов придется перемещать — такой файл может быть один, или их может быть несколько. Вне зависимости от того, сколько файлов будет найдено, мне необходимо что бы все они были перемещены в каталог pdfs. Это сделать нам поможет маленькая магия ключа J. Для того чтобы ключ J сработал правильно, я определил символ ‘X’ и поместил его по обоим сторонам команды mv. (Я честно перевел это, вы, я думаю, честно прочитали. На самом деле так никто не делает. Во второй части этой статьи вы узнаете как пользоваться ключом ‘-exec’, который как раз и предназначен для подобных действий — прим. переводчика).

Помните, что имена файлов в системе UNIX не обязательно имеют расширения. Поэтому вам может понадобиться задать более сложный образец для поиска. Скажем, я захотел найти все файлы, содержащие в своем имени подстроку ‘bsd’. Для этого следует воспользоваться следующей командой:

find . -name "*bsd*" -print./.kde/share/icons/favicons/www.freebsd.org.png

./.kde/share/icons/favicons/www.freebsddiary.org.png

./.kde/share/wallpapers/bsdbg1280x1024.jpg

./mnwclient-1.11/contrib/freebsd

Мы можем искать файлы не только по имени. Например найдем файлы, которые не читали более чем (условие ‘более чем’ задается знаком ‘+’) 30 дней:

find . -atime +30 -print

Для поиска файлов, которые вы не модифицировали какое-то время, используйте ключ ‘-mtime’, а для файлов у которых определенное время назад не менялись права доступа используйте ‘-ctime’. Число после символа ‘+’ задает количество дней (суток). Для того, что бы узнать какие файлы были модифицированы сегодня, попробуйте:

find . -mtime -1 -print

Эта команда покажет вам какие файлы были модифицированы за последние сутки. Заметьте, что для указания времени ‘меньше чем’ следует указать знак ‘-‘.

Ключ ‘-newer’, это еще один ключ, имеющий отношение ко времени. Все три ключа ‘time’ в качестве параметра используют суточные интервалы. Если вы хотите использовать более точные интервалы времени, то вам может помочь ключ ‘-newer’, который позволяет сравнивать время модификации, последнего чтения или смены прав одного файла с другим с точностью до минуты. Например для того что бы поглядеть какие скрытые (файлы с точкой в начале) были изменены с тех пор как вы последний раз изменили файл .cshrc, вы должны выполнить такую команду:

find . -type f -name ".*" -newer .cshrc -print

Обратите внимание, что мы включили в эту команду еще один незнакомый ключ. ‘-type’ с параметром ‘-f’, который устанавливает тип искомого ‘файл’, так как в данном случае нам не нужны изменившиеся каталоги. Ключ ‘-name’ будет искать файлы с именем начинающимся на точку, а ключ ‘-newer’ отберет файлы, которые модифицировались позже файла .cshrc.

По умолчанию подразумевается, что между ключами поиска стоит логический оператор ‘И’, если вы хотите, что бы вместо ‘И’ использовался ‘ИЛИ’, укажите ключ ‘-o’. Поскольку между ключами по умолчанию подразумевается логический оператор ‘И’, то выражение find принимает следующий вид: искать файлы определенного типа ‘И’ с определенным именем ‘И’ более новые чем мой файл .cshrc.

Продемонстрируем разницу между логическим ‘И’ и логическим ‘ИЛИ’. Если я хочу найти все файлы в моем домашнем каталоге, которые не использовались последние 7 дней ‘И’ их размер больше чем 10Мб, то я использую следующую команду:

find . -atime +7 -size +20480 -print

Однако, если я хочу найти файлы которые не использовались последнюю неделю ‘ИЛИ’ их размер больше чем 10Мб, то мне придется выполнить такую команду:

find . -atime +7 -o -size +20480 -print

Если вы будете использовать ключ ‘-size’, вам придется немного повычислять, так как он использует в качестве параметра число 512-байтных блоков в файле. Я могу воспользоваться командой expr для облегчения этого процесса:

find . -atime +7 -o -size +`expr 10 * 1024 * 2` -print

Заметьте, что в этой команде в обратных кавычках (это знак ` в левом верхнем углу вашей клавиатуры) заключено то что надо вычислить. Нам остается поставить перед выражением знак плюс, так как мы хотим найти файлы ‘более чем’ 10Мб размера.

Для того что бы поглядеть заранее то, что сосчитает команда expr, припишите впереди команды find команду echo:

echo find . -atime +7 -o -size +`expr 10 * 1024 * 2` -printfind . -atime +7 -size +20480 -print

Вообще проверка сложного выражения find, для того что бы увидеть его полный вид, перед выполнением, является хорошим тоном.

 

Часть 2

В предыдущей части статьи я познакомил вас с командой поиска find. Сегодня я продолжу свой рассказ и продемонстрирую вам некоторые другие возможности этой полезной команды.

Давайте продолжим с места, на котором мы остановились в прошлый раз:

find . -atime +7 -o -size +'expr 10 * 1024 * 2' -print

Как вы помните, эта команда ищет файлы в текущем каталоге и его подкаталогах (текущий каталог указывается первым параметром ‘.’), к которым не обращались более семи дней (‘-atime +7’) или (на операцию логического ‘ИЛИ’ указывает параметр ‘-o’) размер которых превышает определенное значение (ключ ‘-size +’). Для подсчета размера используется команда expr. Поскольку мне хотелось найти файлы более 10Мб, а find оперирует размерами указанными в 512-ти байтных блоках, то мне нужно умножить 10 на 1024 и на 2 (т.к. 512*2 = 1024). (Не стоит забывать о возможности указания размера искомых файлов в байтах — для этого после числа надо, без пробела, поставить символ ‘с’ — прим. переводчика).

Заметьте, что я использовал символ обратного апострофа »’ (он находится в левом верхнем углу клавиатуры). Когда вам требуется в системе UNIX подставить в параметры одной команды в результат работы другой, следует поместить команду, результат которой вам необходим в обратные апострофы. Это так называемая подстановка команд. Помещая команду производящую вычисления между обратными апострофами, я тем самым подставляю результат вычисления в параметр ключа ‘-size’ команды find.

Последнее на что я хочу обратить ваше внимание, это то что я поставил перед символами ‘*’ обратные слеши ‘\’. Дело в том, что в вычислениях ‘звездочка’ означает умножение, тогда как интерпретатор команд считает его подстановочным символом. Однако если перед ‘звездочкой’ поставить знак обратного слеша, интерпретатор команд не будет считать его символом подстановки, в то время как команда expr воспримет пару символов ‘\*’ как знак умножения.

Наконец перейдем к следующим примерам. Давайте будем считать, что я имею некий каталог, содержащий большую ветвь файловой системы, в котором я хочу найти все файлы удовлетворяющие определенным условиям, после чего эти файлы следует удалить. Существует несколько способов сделать это при помощи команды find. Давайте попробуем их сравнить.

В моем домашнем каталоге есть подкаталог tmp, в котором, в свою очередь, находится подкаталог tst. В каталоге tst содержится много файлов и каталогов, некоторые из которых имеют расширение .old. Давайте подсчитаем сколько файлов находится в каталоге tst:

cd ~/tmp/tstfind . -print | wc -l

269

Обратите внимание, что команда find печатает каждый найденный файл в одной строке. Используя канал я передам результат работы find команде wc (word count — подсчет слов), заставив ее при помощи ключа -l считать количество строк. В результате выполнения этой операции я узнал, что в каталоге ~/tmp/tst 269 файлов (включая каталоги, поскольку в UNIX каталог на самом деле является особым видом файла). Посмотрим сколько из них имеет расширение .old:

find . -name "*.old" -print | wc -l 67

Как мне теперь удалить эти файлы? Один из способов — использование ключа -exec, с командой rm в качестве параметра, например так:

find . -name "*.old" -exec rm {} ;

Когда команда выполнится, я могу повторить поиск для проверки наличия файлов с расширением .old:

find . -name "*.old" -print | wc -l 0

Теперь мы убедились, что файлы удалены. Однако, для удаления большого количества файлов, такой способ не является лучшим. Дело в том, что когда вы используете ключ -exec, для каждого найденного файла создается отдельный процесс для выполнения команды — параметра ключа -exec. Это скорее всего не создаст проблем на вашем домашнем компьютере, где вы собираетесь найти всего несколько файлов, однако если вы попытаетесь таким способом найти и обработать сотни или тысячи файлов на рабочем сервере, то проблемы появятся — дело в том, что к сожалению этот метод требует наибольшее количество ресурсов и работает медленнее чем все остальные.

Воспользуемся для удаления файлов другим способом:

find . -name "*.old" -print | xargs rm

Заметьте, что в данном случае не используются завершающие символы ‘\;’, так как они необходимы только при использовании ключа ‘-exec’. Используя команду xargs в этом примере, я опять стираю все файлы, оканчивающиеся на .old, однако в отличие от предыдущего способа, при этом создается только один процесс. Команда find создает список найденных и подлежащих удалению файлов. Этот список передается команде xargs, которая преобразует строки списка в одну большую строку, разделенную пробелами, затем эта строка передается команде rm.

И наконец воспользуемся третьим способом удаления файлов, используя ключ ‘-delete’ команды find:

find . -name "*.old" -delete

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

sysctl -a | grep kern.argmaxkern.argmax: 65536

Число 65536 означает максимальное количество байт (символов) в буфере аргумента.

Вас может заинтересовать какие файлы удалит команда find. В моем примере я просто удаляю старые файлы из моей тестового каталога. Если вы боитесь, что команда find может удалить некоторые нужные вам файлы, для начала выполните команду:

find . -name "*.old" -print

Она выведет вам список файлов, подходящих под образец. Если список файлов соответствует вашим ожиданиям, воспользуйтесь ключом ‘-delete’, как описано выше. Однако есть и другой способ — вы можете воспользоваться ключом ‘-ok’:

find . -name "*.old" -ok rm ;

Ключ ‘-ok’ заставит команду find выдавать запрос перед удалением файла. Обратите внимание, что для удаления я использовал команду rm, а не ключ ‘-delete’. Символы окончания команды ‘\;’ требуются как и в случае ключа ‘-exec’.

Давайте двинемся дальше и посмотрим на работу других ключей команды find.

При помощи ключа ‘-ls’ можно получить следующую информацию о найденных файлах: номер inode в файловой системе, размер в блоках, права доступа, количество жестких ссылок (hard link), имя владельца, группу, размер в байтах, время последней модификации, а так же имя найденного файла. Следующая команда показывает мне первые десять подкаталогов в моем домашнем каталоге. Обратите внимание, на то, что для поиска каталогов используется ключ ‘-type’ с параметром ‘d’:

cdfind . -type d -ls | head

976142 8 drwxr-xr-x 39 genisis wheel 4096 Mar 3 17:52 .

1413099 2 drwxr-xr-x 2 genisis wheel 512 Mar 3 13:38 ./pdfs

373539 2 drwxr-xr-x 2 genisis wheel 512 Feb 6 12:38 ./tst

1087249 2 drwxr-xr-x 2 genisis wheel 512 Oct 4 07:29 ./perlscripts

650764 2 drwx------ 2 genisis wheel 512 Mar 3 17:52 ./mail

706616 2 drwx------ 4 genisis wheel 512 Sep 22 14:29 ./.kde

706635 2 drwx------ 11 genisis wheel 512 Nov 7 12:36 ./.kde/share

706636 4 drwx------ 3 genisis wheel 1536 Mar 2 18:38 ./.kde/share/config

785986 2 drwx------ 2 genisis wheel 512 Sep 22 14:36 ./.kde/share/config/colors

706682 2 drwx------ 3 genisis wheel 512 Mar 2 18:36 ./.kde/share/fonts

Давайте попробуем еще чему-нибудь научиться используя ключ ‘-ls’. Ранее для того что бы узнать сколько файлов подходит под определенный поисковый запрос, мы использовали перенаправление вывода в команду wc -l. Воспользуемся этим для подсчета количества подкаталогов в моем домашнем каталоге:

find . -type d -print | wc -l 256

На самом деле он содержит только 255 подкаталогов, так как первый результат поиска — сам родительский каталог. Теперь попробуем побольше выяснить о структуре этих каталогов, используя следующую конструкцию:

find . -type d -ls | awk '{print $4 - 2, $NF}' | sort -rn | head37 .

26 ./.kde/share/apps/kio_http/cache

18 ./.kde/share/apps

15 ./.gimp-1.2

9 ./tmp/tst

9 ./.kde/share

8 ./tmp/tst/h

8 ./tmp/tst/g

8 ./tmp/tst/f

8 ./tmp/tst/e

Великолепно! Мы видим, что в моем домашнем каталоге ‘.’ — 37 подкаталогов, а в каталоге ‘./.kde/share/apps/kio_http/cache’ — 26 и так далее. Теперь разберемся как работает эта команда. Для начала я воспользовался ключом ‘-ls’, который дает нам полную информацию о каждом найденном каталоге. Эта информация передается утилите awk, которая используется для извлечения данных из определенных полей. Вспомните, что результатом работы ключа ‘-ls’ является список, состоящий из следующих полей: номер inode, количество блоков, права, количество ссылок и т.п. Я запрограммировал awk, так что бы он брал информацию из четвертого столбца (который содержит количество ссылок и в awk обозначается $4) и вычел из него двойку (так как меня не интересуют каталоги ‘.’ и ‘..’). Еще мне необходимо название каждого каталога и поскольку оно содержится в самом последнем столбце, я воспользовался переменной $NF для получения этой информации. Поместив эти инструкции в фигурные скобки ‘{}’, я запрограммировал awk на выполнение этих действий с каждой строкой данных, поступающих от команды find. В свою очередь, результат выполнения команды awk передается в команду sort. Используя ключи ‘-rn’, я задаю обратный порядок сортировки (от большего к меньшему), для того что бы увидеть, какие каталоги содержат больше подкаталогов. Так как я не хочу смотреть на весь получившийся результат, я пользуюсь командой head, передавая ей результат работы команды sort, в результате чего получаю лишь первые десять строк этого результата.

Следующий ключ, на котором мы остановимся — ‘-perm’. Если мы хотим найти все файлы, которые имеют права доступа ‘777’, что означает доступ на чтение, запись и выполнение для всех, то нам следует воспользоваться командой:

find . -perm 777 -print

Вышеуказанная команда ищет файлы с правами ‘777’. Если вы озабочены поиском файла в правах которого установлен конкретный бит (независимо от остальных), то воспользуйтесь чем-нибудь подобным (обратите на знак ‘-‘ перед числом задающим права доступа — прим. переводчика):

find . -perm -4000 -print

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

find . -perm -0002 -print

Она найдет вам файлы, которые доступны ‘на запись’ для ‘всех’. Заметьте, что -0002, -002, -02 и -2 дадут вам одинаковый результат, так как нули в начале подразумеваются.

Последние два ключа, которые я опишу в этой статье, полезны при резервном копировании или репликации каталогов. Начнем с ключа ‘-depth’. Скажем я хочу провести резервное копирование моего домашнего каталога в смонтированный каталог /backup (имеется в виду копирование со всеми правами и т.п. — прим. переводчика). Я могу это сделать следующей командой:

find . -depth -print | cpio -dump /backup

Эта команда может выполняться и без ключа ‘-depth’, но не всегда. По умолчанию find создает список найденных файлов начиная с места указанного в этой команде, в моем случае это ‘.’ или мой домашний каталог. Этот список состоит из названия каталога, после которого идет содержимое этого каталога. Может возникнуть ситуация, когда исходный каталог имеет права только на чтение, и команда cpio, сначала создав каталог с такими правами, уже не сможет поместить туда файлы, которые содержатся в исходном каталоге (т.е. создается пустой каталог, только для чтения, в котором производится попытка создать файлы — прим. переводчика).

Однако, если вы вспомните о существовании ключа ‘-depth’, то команда find будет формировать список найденных файлов начиная с нижних уровней вложенности. Это означает, что содержимое каталога будет в списке раньше чем его название. А это в свою очередь означает, что файлы, находящиеся в исходном каталоге, будут помещены cpio в целевой каталог раньше, чем она наложит на него права.

А как поступить, если мне не хочется реплицировать всю структуру домашнего каталога, а только его часть? Здесь может помочь ключ ‘-prune’. Давайте представим, что я хочу скопировать весь мой домашний каталог, за исключением каталога tmp. Я могу поступить следующим образом:

find . -type d -name tmp -prune -o -print | cpio -dump /backup

Синтаксис команды выглядит немного знакомо: я использую ключ ‘-name’ для нахождения всех каталогов (‘-type d’) с названием tmp и все такие каталоги пропускаю ‘-prune’. Затем идет логическое ‘ИЛИ’ (‘-o’), в результате которого все остальные найденные файлы печатаются (‘-print’) и передаются команде cpio.

Поиск в unix, команда find.: 1 комментарий

Добавить комментарий