Bash 脚本对目录中的每个子目录执行操作

Bash 脚本对目录中的每个子目录执行操作

假设我有一个像这样的目录结构

Dir1/
  SubDir1/
  SubDir2/
  SubDir3/

我希望能够将“Dir1”传递给 bash 脚本,然后对其所有子目录(SubDir1、SubDir2、SubDir3)执行操作。

感谢您的帮助!

答案1

听起来你要跑步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)。

答案2

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

答案3

如果您使用 GNU find,则可以使用-execdir参数,例如:

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

相关内容