Скрипт Bash, запустите команду echo с помощью команды find, установите переменную и используйте эту переменную - PullRequest
2 голосов
/ 18 ноября 2011

Я хочу запустить две команды, но вторая команда зависит от первой.

Есть ли способ сделать что-то подобное.

 find . -name '*.txt' -exec  'y=$(echo 1); echo $y' {} \;

...

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

find . -name '*.txt' -exec 'cd basedir && /mycmd/' {} \;

Как мне это сделать?

Ответы [ 2 ]

3 голосов
/ 18 ноября 2011

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

find . -name '*.txt' -execdir /mycmd {} \;
1 голос
/ 18 ноября 2011

Опция -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 {}' \;
...