выполнить команду для всех файлов и сохранить в новом каталоге, используя имя файла в аргументе script - PullRequest
0 голосов
/ 02 апреля 2020

Я хочу запустить скрипт для всех файлов в моих каталогах с расширением .fa. У сценария есть аргумент для выходного каталога, и я хочу использовать имя файла для этого аргумента.

Чтобы запустить скрипт для одного файла, я бы использовал:

metaerg.pl  --dbdir /projects/p30777/db DeMMO1_10.fa --sp --tm --outdir DeMMO1_10  --force

, где DeMMO1_10.fa - это имя файла, а DeMMO1_10 - имя нового каталога, создаваемого для вывода. Существует около 500 таких файлов, разбитых на шесть каталогов. Я хочу запустить что-то вроде:

find . -name '*.fa' -exec metaerg.pl  --dbdir /projects/p30777/db {} --sp --tm --outdir {}  --force \;

, но я не уверен, что поставить в качестве аргумента --outdir, чтобы он передавал только имя файла без расширения .fa или остальную часть дорожка.

1 Ответ

1 голос
/ 02 апреля 2020
find . -name '*.fa' -exec sh -c 'metaerg.pl  --dbdir /projects/p30777/db {} --sp --tm --outdir `basename $1 .fa`  --force' sh {} \;

Мы создаем подоболочку и передаем ей заполнитель {} из find-exe c в качестве параметра $1 (последний sh равен $0 только для согласованности). В рамках подоболочки мы берем параметр $1 и используем его в обратных кавычках для оценки basename() и используем полученный текст в качестве аргумента для outdir.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...