bash-скриптинг: как сохранить результат команды find в переменной, чтобы использовать его в -exec - PullRequest
1 голос
/ 19 октября 2011

Я хочу найти файлы и сохранить имя файла в переменной и использовать эту переменную в -exec для выполнения некоторых вычислений с ней

, например, каждый раз, когда find возвращает имя файла, которое я используюэто имя файла в -exec, чтобы произвести что-то еще одновременно, команда find находит этот файл

спасибо

Ответы [ 2 ]

0 голосов
/ 20 октября 2011

«Я хочу взять каждое имя файла и искать внутри информацию, например строки в строках, предложения» - ОК, Джонатан, это то, что ты должен был сказать в своем вопросе: -)

Ответ:

find /dir -iname "*whatever*" | xargs grep 'text'

найдет текст "текст" в каждом файле *whatever* в каталоге /dir.

0 голосов
/ 19 октября 2011

Тогда не исполняйте.

find -whatever |
while read filename; do
    Whatever you did in -exec before "$filename"
    Other thing "$filename"
done

Это не надежно с именами файлов, содержащими специальные символы.

Редактировать : Если вы хотите сделатьнесколько вещей к попаданиям, возвращаемым find, это, безусловно, возможно и с find -exec или xargs:

find -whatever -exec sh -c 'whatever you did in -exec before {}; other thing {}' \;

Или вы можете изменить вывод в скрипт оболочки и передать его sh:

find -whatever -printf 'mv %p destdir; ln -s destdir/%f %h\n' | sh

Но если вы действительно, действительно хотите, чтобы действие произошло, как только find узнает о файле, -exec, вероятно, путь.(Мне не ясно, при каких обстоятельствах это было бы полезным требованием. Возможно, вы можете объяснить, чего вы хотите достичь?)

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

...