Я нахожу файлы, которые не заканчиваются на .done, вот так:
find -type f -not -name \*.done -execdir myscript {} \;
Теперь я хочу сделать следующее:
-передавать каждый найденный файл в myscript
-source каждый файл в myscript с помощью команды source
-запустить myscript для каждого исходного файла
Примечание: я хочу запустить myscript повторно, один раз для каждого найденного файла. Я не хочу запускать myscript для нескольких файлов одновременно. Поэтому по сути я пытаюсь перебрать найденные файлы и получить их в myscript. Как мне это сделать?
решение1
Ваша find
команда выполняется myscript
для каждого найденного файла, передавая имя файла в качестве первого аргумента командной строки myscript
.
Вы хотите получить файл в исходном формате myscript
, поэтому myscript
включите в его код следующее:
. ./"$1"
Примечания:
- Я предполагаю,
myscript
что это интерпретируется оболочкой. - Вы упомянули
source
, но.
он более портативен. - Я использовал,
./"$1"
потому что ты использовал-execdir
.Кажетсянекоторые реализацииfind
не включают./
в строку, заменяемую{}
после-execdir
. Если бы это было так, тоэта неудачаможет случиться. Добавление явного./
предотвращает это.