我正在尝试运行一个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 .
答案 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-hdpi
,res-mdpi
和res-xhdpi
目录并不感兴趣,因为您的示例代码无论如何都没有使用它们 - 它不应该这样做要弄清楚如何在......中添加这些内容太难了。