Команда Linux: знайдіть файли та запустіть команду на них


16

Як мені вдається знайти всі файли в каталозі та підкаталогах і виконати команду над ними?

Наприклад,

find . -type f -name "*.txt" 

знаходить усі файли txt і:

find . -type f -name "*.txt" | gedit

надсилає його в gedit, але всередині текстового файлу. Я хочу, щоб gedit відкривав усі текстові файли.

Відповіді:


22

Ви можете використовувати -execпрапор для виконання команди на кожному відповідному файлі:

$ find ./ -type f -name "*.txt" -exec gedit "{}" \;

Синтаксис

Синтаксис дещо дивний (див. -exec command ;На мапах детальніше):

The string `{}' is replaced by the current file name being processed

Ви також можете розглянути -execdir, що буде робити те саме, але виконує команду з підкаталогу, що містить відповідний файл (це, як правило, краще).


1
Дякую. Я бачу, що це працює. Але що означає кінець ("{}" \ :) означає? виконати список?

1
{}Варто ім'я поточного файлу, а точка з коми просто завершення команди. Нахил та навколишні котирування - це лише для запобігання розширення оболонки.
Девід Кейн

5

find . -type f -name "*.txt" -print0 | xargs -0 gedit


Дякую. Я бачу, що це працює. Але що означає -print0 | xargs -0 частина означає?

1
@xyz, ви можете прочитати про прапори будь-якої команди UNIX, використовуючи довідкові сторінки. Спробуйте man findабо man xargs, тоді /шукайте заданий прапор. Документація досить хороша, вона повинна відповісти на ваші запитання.
Девід Кейн

1
-print0друкує символ NULL після кожного запису, -0очікує , що записи будуть розділені символом NULL. Це найбезпечніший спосіб поводження з хитрими іменами.
Notinlist

І хіба не дивно, що синтаксис не gedit xargs -0, а не xargs -0 gedit. Я бачу, що колишній не працює, але не розумію, чому.

3
xargs є кращим порівняно з -exec з міркувань продуктивності, оскільки xargs може "зібрати" ряд аргументів, перш ніж передавати їх в gedit. Якщо вам потрібно запустити gedit проти кожного файлу окремо, замініть '... -print0 | xargs -0 gedit 'з' ... -print0 | xargs -0 -i gedit {} 'xargs - одна з таких команд, як пошук і екран, про які ви ніколи не знаєте, як ви пройшли без року після того, як дізнаєтесь про це.
arclight
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.