выполнение нескольких команд с помощью команды find -exe c, но одной из команд является 'cd' - PullRequest
1 голос
/ 20 января 2020

Вот что я пытаюсь достичь:

find .. -type d -depth 1 \( -exec cd "{}" \; -exec touch abc \; \)

Я обнаружил, что часть команды 'cd' не работает, я получаю файл 'ab c' в текущей папке и не в дочерних папках

как выполнить команду внутри найденных папок?

Чтобы уточнить, следуя комментарию Дибери: мне нужно иметь возможность подключиться к каждой папке для выполнения более сложных команд (прикосновение было примером)

Я нахожусь на MacOS, если это имеет значение

Ответы [ 3 ]

1 голос
/ 20 января 2020

Команда cd не может использоваться с -exec в find, поскольку cd является встроенной оболочкой (вы можете проверить это с помощью type cd), а не исполняемым (т. Е. Такого исполняемого файла нет) /usr/bin/cd). В вашем случае вы можете включить имя папки в команду touch следующим образом:

find .. -type d -depth 1 -exec touch "{}/abc" \;

или использовать git по вашему запросу (опция -C позволяет вам запускать git, как если бы вы были в этом каталоге):

find .. -type d -depth 1 -exec git -C "{}" some_git_action \;

Даже без find:

for i in ../*/; do cd "$i"; some_cmd; cd -; done

cd в этот каталог и используйте cd - до go назад к оригиналу и добавив завершающий /, звездочка будет расширена только до каталогов.

1 голос
/ 20 января 2020

Вы можете использовать оболочку l oop и запускать свои команды в подоболочке, чтобы вам не приходилось снова менять каталог:

for d in ./*/; do (
    cd "$d"
    touch foo  # Or whatever you want
)
done

В качестве альтернативы, чтобы получить команду find для для работы, вы можете запустить подоболочку для каждого каталога:

find -maxdepth 1 -type d -exec bash -c 'cd "$1"; touch bar' _ {} \;

Где, опять же, touch bar может быть как угодно сложным.

1 голос
/ 20 января 2020

Если комментария diberys недостаточно, вы можете направить поиск на некоторое время l oop, например:

find . -maxdepth 1 -type d | while read -r dir; do
    cd $dir
    touch some_file.txt
    cd -
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...