我正在尝试递归地从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脚本的新手。我不知道这个错了什么。
修改
这就是我真正想要的。
orgfilename-nq8.png
我有一个适用于单个目录的代码
for f in *.png; do pngnq -f -n 256 "$f" && pngcrush "${f%.*}"-nq8.png "$f";rm "${f%.*}"-nq8.png; done
我想以递归方式执行此操作
答案 0 :(得分:0)
简单地说:
find -name '*.png' -printf '%f\n'
如果你想为每个文件运行一些东西:
find -name '*.png' -printf '%f\n' |
while read file; do
# do something with "$file"
done
或xargs
:
find -name '*.png' -printf '%f\n' | xargs -n1 command
请确保您不能直接使用find
:
find -name '*.png' -exec command {} +
或
find -name '*.png' -exec bash -c 'do_something with ${1##*/}' -- {} \;
在http://unixhelp.ed.ac.uk/CGI/man-cgi?find或
上搜索-printf
man find | less +/^' *-printf'