0

我正在尝试运行一个 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 .
4

1 回答 1

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-hdpi,res-mdpires-xhdpi目录,因为您的示例代码无论如何都没有使用它们 - 弄清楚如何将它们添加到......

于 2013-03-21T21:55:25.580 回答