【发布时间】:2013-02-18 22:59:10
【问题描述】:
我正在尝试以递归方式从 find 命令中检索文件名。此命令打印所有带有完整路径的文件名
> for f in $(find -name '*.png'); do echo "$f";done
> ./x.png
> ./bg.png
> ./s/bg.png
但是当我尝试使用这些命令获取文件名时,它会打印出来
for f in $(find -name '*.png'); do echo "${f##*/}";done
bg.png
和
for f in $(find -name '*.png'); do echo $(basename $f);done
bg.png
它省略了其他 2 个文件。我是 shell 脚本的新手。我不知道这个有什么问题。
编辑:
这是我真正想要的。
- 我想递归遍历一个目录并找到所有的 png 图片
- 发送到 pngnq 进行 RGBA 压缩
- 它使用
orgfilename-nq8.png输出新文件 - 将其发送到 pngcrush 并重命名并生成一个新文件(org 文件将被覆盖)
- 删除新文件
我有一个适用于单个目录的代码
for f in *.png; do pngnq -f -n 256 "$f" && pngcrush "${f%.*}"-nq8.png "$f";rm "${f%.*}"-nq8.png; done
我想递归地做这个
【问题讨论】:
-
如果你想知道它为什么没有达到你想要的效果:你一定是把它用作
for f in "$(find -name '*.png')"; ...(带引号),这是我的猜测,或者你已经改变了IFS?