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

eva*_*van 5 script bash

假设我有一个目录结构,如

Dir1/
  SubDir1/
  SubDir2/
  SubDir3/
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的帮助!

Mik*_*kel 7

鉴于听起来您要跑步tar,最好的方法可能是:

basedir=$1
for dir in "$basedir"/*; do
    if test -d "$dir"; then
        tar -cvf "$dir".tar "$dir"
        rm -r "$dir"
    fi
done
Run Code Online (Sandbox Code Playgroud)

如果您想使用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
Run Code Online (Sandbox Code Playgroud)

另请注意,在 中tar -cvf,输出文件的名称排在第一位(紧跟在 之后f)。