Shell 脚本,遍历文件夹

Shell 脚本,遍历文件夹

我具有非常基本的 Shell 脚本知识。

original在许多不同的文件夹下都有照片,就像这样

folder
  + folder1
    + original
  + folder2
    + original
  + folder3
    + original
  + folder4
    + original

我正在尝试按照此结构在文件夹mogrify下创建缩略图。thumb

folder
  + folder1
    + original
    + thumb
  + folder2
    + original
    + thumb
  + folder3
    + original
    + thumb
  + folder4
    + original
    + thumb

我不太清楚如何编写可以遍历它的 shell 脚本。我可以给 mogrify 它的设置,但我不完全明白如何告诉脚本去遍历每个文件夹以运行 mogrify 命令。

答案1

您可以使用 find 递归查找目录,并对名称与模式匹配的所有文件执行操作,而不是使用 for 循环(如果任何文件路径中有空格,就会出现问题)。如果需要影响所有文件,只需省略 -name 选项或对其进行自定义即可。

find /path/to/directory -type f -name "*.png" -exec mogrify {} +

为了更好地使用 mogrify 的选项,您可以使用 xargs。

find /path/to/directory -type f -name "*.png" | xargs mogrify -path /path/to/thumbnails

答案2

我确信你收到的回复会有很大差异。有很多方法可以做到这一点。以下方法只是使用ls列出目录中的目录当前目录。然后它进入该目录以获取 png 文件列表(根据需要进行修改)。对于每个 png 文件,都会调用 mogrify。

基本上,你需要

  1. 将其复制到文本编辑器中。
  2. 修改包含 mogrify 命令的行以适应。
  3. 为简单起见,将其作为纯文本文件保存到您想要运行它的目录中。
  4. 使用以下命令设置文件的执行位chmod +x /path/to/scriptname
  5. 使用以下命令从目录运行它./scriptname

脚本如下:

DIRS="$(find . -mindepth 1 -maxdepth 2 -type d)"

for d in $DIRS
do
    cd $d
    FILES="$(find . -name '*.png')"
    for f in $FILES
    do
    mogrify -path ./thumbnails/ $f
    done
    cd ..
done

相关内容