Опция -exec
Find ожидает, что исполняемый файл с аргументами, а не команда, но вы можете использовать bash -c cmd
для запуска произвольной команды оболочки, например:
find . -name '*.txt' -exec bash -c 'cd $(dirname {}) && pwd && /mycmd $(basename {})' \;
Я добавил pwd
, чтобы подтвердить, что mycmd
выполняется в правильном каталоге. Вы можете удалить это. dirname
дает вам каталог каждого файла, а basename
дает вам имя файла. Если вы пропустите basename
, ваша команда получит (как {}
) путь к каждому файлу относительно каталога, в котором вы запускаете find
, который отличается от текущего каталога mycmd
из-за cd
, поэтому mycmd
вероятно, не сможет найти файл. Если вы хотите, чтобы ваша команда получила абсолютный путь, вы можете попробовать это:
find $PWD -name '*.txt' -exec bash -c 'cd $(dirname {}) && pwd && /mycmd {}' \;