5

Предполагая, что у меня есть структура каталогов, как

Dir1/
  SubDir1/
  SubDir2/
  SubDir3/

Я хотел бы иметь возможность передать 'Dir1' скрипту bash, а затем выполнить действие для всех его подкаталогов (SubDir1, SubDir2, SubDir3).

Спасибо за вашу помощь!

3 ответа3

7

Учитывая, что вы собираетесь запускать tar , возможно, лучший способ это сделать:

basedir=$1
for dir in "$basedir"/*; do
    if test -d "$dir"; then
        tar -cvf "$dir".tar "$dir"
        rm -r "$dir"
    fi
done

Если вы хотите использовать find , вы должны добавить -maxdepth 1 , чтобы избежать создания дополнительных файлов tar.

basedir=$1
for dir in $(find "$basedir" -mindepth 1 -maxdepth 1 -type d); do
    tar -cvf "$dir.tar" "$dir"
    rm -r "$dir"
done

Также обратите внимание, что в tar -cvf имя выходного файла идет первым (сразу после f).

1
find Dir1 -mindepth 1 -type d -exec dosomethinghere {} \;
0

Если вы используете GNU find , вы можете использовать параметр -execdir , например:

find . -type d -depth 1 -execdir echo Action on $(pwd)/{} ';'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .