在每个子目录中运行命令集

在每个子目录中运行命令集

我有以下命令,我想在当前工作目录的每个子目录中运行它们。命令如下:

OUTPUTFN=`basename $PWD`
cat *.xml > $OUTPUTFN.txt
mv $OUTPUTFN.txt $OUTPUTFN.xml
mv $OUTPUTFN.xml ..

此目录中有 700 多个文件夹,我希望它进入每个文件夹,执行这四个命令,然后进入下一个文件夹,执行命令,然后重复。我尝试将此站点中的几个示例与我的命令相结合,但无法使其工作。

答案1

脚本

for DIR in *; do
    [ -d "$DIR" ] && cat "$DIR"/*.xml > "$DIR.xml"
done

单行

for DIR in *; do [ -d "$DIR" ] && cat "$DIR"/*.xml > "$DIR.xml"; done

怎么运行的

  • Bash 扩展*到当前目录中的所有文件和目录。

  • for DIR in *; do ... done遍历这些并对...每一个执行。

    在每种情况下,$DIR都保存当前条目的名称。

  • [ -d "$DIR" ] && ...检查是否$DIR确实是一个目录(而不是一个文件)。

    如果是,...则执行。

  • cat "$DIR"/*.xml > "$DIR.xml"完全按照你的四行代码所做的事情去做。

相关内容