Перепутанный передачей по каналу команд от находки до commandX?

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

  1. Передайте $PWD непосредственно найти, вместо того, чтобы определить его для каждой подоболочки. Это сделает find включайте полный путь в его вывод.
  2. Отключите названия родительского каталога с rev и cut.

Таким образом, я предложил бы, чтобы следующее получило список всех каталогов, содержащих желаемый файл:

find "$PWD" -name '__openerp__.py' |
rev                                | 
cut -d/ -f3-                       |
rev

Отметьте это find не заказывает его вывод, таким образом, он должен быть отсортирован прежде uniq'ing это. Как sort уже поддержки, сжимающие идентичные элементы (-u переключатель), с исходным вопросом можно затем ответить:

find "$PWD" -name '__openerp__.py' |
rev                                | 
cut -d/ -f3-                       |
rev                                |
sort -u
2
24.10.2014, 18:36
1 ответ

Вы захотите использовать опцию find -exec:

find corpus/ -type f -exec ./individual.sh {} \;

Для каждого найденного совпадения, которое find найдет, будет выполняться individual.sh, заменяя {} на имя файла, который он нашел. \; - так вы завершаете exec поиском.

Причина, по которой ваш канал не работает, заключается в том, что выходные данные из find предоставляются individual.sh через STDIN, а не в качестве аргумента. Вашему скрипту необходимо знать, чтобы искать EITHER-вход или аргументы через STDIN, чтобы использовать это.

3
27.01.2020, 22:05

Теги

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