目录遍历-使用find递归地从bash脚本中获取文件名



我正在尝试递归地从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脚本的新手。我想不出这个怎么了。

编辑:

这正是我真正想要的。

  1. 我想递归地循环浏览一个目录并找到所有的png图像
  2. 发送给pngnq进行RGBA压缩
  3. 它输出带有orgfilename-nq8.png的新文件
  4. 将其发送到pngcrush并重命名并生成一个新文件(组织文件将被覆盖)
  5. 删除新文件

我有一个在单一目录上工作的代码

for f in *.png; do pngnq -f -n 256 "$f" && pngcrush "${f%.*}"-nq8.png "$f";rm "${f%.*}"-nq8.png; done

我想递归地完成

简单操作:

find -name '*.png' -printf '%fn'

如果你想为每个文件运行一些东西:

find -name '*.png' -printf '%fn' |
while read file; do
    # do something with "$file"
done 

或使用xargs:

find -name '*.png' -printf '%fn' | xargs -n1 command

请确保您不能像这样直接使用find

find -name '*.png' -exec command {} +

find -name '*.png' -exec bash -c 'do_something with ${1##*/}' -- {} ;

在上搜索-printfhttp://unixhelp.ed.ac.uk/CGI/man-cgi?find或在中

man find | less +/^' *-printf'

相关内容

  • 没有找到相关文章

最新更新