递归遍历bash中的文件并通过命令操作每个文件

Gau*_*giS 1 unix bash command-line-interface file-manipulation

我想从 bash 递归地遍历文件夹中的每个文件,并对它们进行某种简单的操作。例如,更改权限,更改时间戳,使用 ImageMagick 调整图像大小等,您明白了。

我知道(像大多数初学者一样)如何在目录中做到这一点,但递归......?

$ for f in *.jpg ; do convert $f -scale 25% resized/$f ; done
Run Code Online (Sandbox Code Playgroud)

让我们保持简单。说,

$ for f in *; do touch $f; done
Run Code Online (Sandbox Code Playgroud)

wja*_*rea 7

使用globstar

shopt -s globstar
for f in ./**; do
    touch "$f"
done
Run Code Online (Sandbox Code Playgroud)

Bash 手册

globstar

如果设置,**文件名扩展上下文中使用的模式“ ”将匹配所有文件以及零个或多个目录和子目录。如果模式后跟“ /”,则仅目录和子目录匹配。

顺便说一句,始终引用您的变量,并在文件名看起来像 options 的情况下使用./

这是基于codeforester的答案here

  • @维塔利真实。您可以添加一个简单的检查来跳过目录:`[[ -d $f ]] && continue` (2认同)