Как рекурсивно выполнить программу для всех файлов, содержащихся в каталоге, с помощью find

Утилита catпросто объединяет переданные ей данные, так что здесь она не очень полезна.

Предполагая, что допустимо несколько небрежно относиться к тому, что представляет собой действующий IP-адрес:

grep -Ex '([0-9]{1,3}\.){3}[0-9]{1,3}' file

Это сопоставит и напечатает все строки, соответствующие заданному регулярному выражению (и отбросит остальные ).

Еще более небрежным решением было бы отбрасывать строки, содержащие что-либо, кроме точек и цифр:

grep -v '[^0-9.]' file

В зависимости от ваших требований, одного из них будет достаточно.

Для полностью правильного регулярного выражения (не соответствует недопустимым IP-адресам ), вы можете использовать

grep -Ex '((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])' file
0
10.05.2020, 13:27
2 ответа

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

find testDir -type f -exec./logic {} essai \;

Это будет искать в каталоге testDir(, а также в любом подкаталогеtestDir)обычные файлы, и для каждого найденного файла будет вызывать вашу программу с путем к файлу в качестве первого аргумента (и с essaiв качестве второго аргумента ).

Разница между этим и вашим собственным приказом,

find. -type f -exec./logic testDir/ essai '{}' \;

в том, что

  1. Путь к найденному файлу передается как последний аргумент командной строки,
  2. Первый аргумент всегда testdir/,
  3. Вы выполняете поиск в текущем каталоге (и его подкаталогах ).
2
28.04.2021, 23:15

Это может сделать то, что вы ищете-

find testDir/ -type f | awk '{system("./logic "$1" -your_args_here")}'

0
28.04.2021, 23:15

Теги

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