递归枚举文件和文件夹

时间:2013-03-21 20:59:33

标签: android macos bash

我正在尝试运行一个bash脚本,它将在当前目录上运行,查找文件并对它们执行一些操作,当找到目录时,对它进行反复操作。

令我困惑的是我的操作,它应该转换每个图形文件,调整大小,并将其放在并行目录结构中,为四个并行目录执行此操作,这意味着它将模仿原始目录结构创建文件夹就好了。

问题是它不起作用,并且它一直在递归到新创建的目录中。

你能帮忙做好吗?

recurse() {
 for i in "$1"/*;do
    if [ -d "$i" ];then
        echo "dir: $i"
        mkdir "res-ldpi/$i"             
        mkdir "res-hdpi/$i"             
        mkdir "res-mdpi/$i"             
        mkdir "res-xhdpi/$i"
        recurse "$i";            
    elif [ -f "$i" ]; then
        convert ./"$i" -resize 38% -unsharp 0x1 res-ldpi/"$i"
    fi
 done
}

recurse .

1 个答案:

答案 0 :(得分:1)

也许是这些方面的东西(未经过测试......):

while read fn
do
  dn=$(dirname "${fn}")
  bn=$(basename "${fn}")
  [[ -d "res-ldpi/${dn}" ]] || mkdir -p "res-ldpi/${dn}"
  convert "${fn}" -resize 38% -unsharp 0x1 "res-ldpi/${dn}/${bn}"
done < <(find "${1}"/. -type f -print)

我们的想法是1)使用find只提供目录及其子目录中每个文件的名称,2)将其拆分为目录和文件名,3)检查目标目录是否存在并在必要时创建它,然后4)根据需要运行convert

对于res-hdpires-mdpires-xhdpi目录并不感兴趣,因为您的示例代码无论如何都没有使用它们 - 它不应该这样做要弄清楚如何在......中添加这些内容太难了。