我想将查找结果传递给新查找。我所拥有的是:
find . -iname "2010-06*" -maxdepth 1 -type d | xargs -0 find '{}' -iname "*.jpg"
预期结果:第二个查找收到从2010-06开始的文件夹列表,第二个查找返回这些文件夹中包含的jpg列表。
实际结果:“查找:./2010-06纽约\ n:未知选项”
哦,真的。我有一种感觉它涉及第二个发现作为输入接收的输出格式,但我唯一的想法是后缀-print0首先找到,没有任何改变。
有什么想法吗?
答案 0 :(得分:10)
你需要2件事。 -print0
,更重要的是-I{}
关于xargs,否则{}
不做任何事情。
find . -iname "2010-06*" -maxdepth 1 -type d -print0 | xargs -0 -I{} find '{}' -iname '*.jpg'
答案 1 :(得分:6)
无用的xargs。
find 2010-06* -iname "*.jpg"
至少Gnu-find接受多个搜索路径。-maxdepth和type -d是隐式假设的。
答案 2 :(得分:2)
怎么样
find . -iwholename "./2010-06*/*.jpg
等?
答案 3 :(得分:1)
虽然你确实说过你特别希望这个find + pipe问题能够正常工作,但是分叉额外的find
命令效率很低。由于您将-maxdepth指定为1,因此您不会遍历子目录。因此,只需使用带有shell扩展的for
循环。
for file in *2010-06*/*.jpg
do
echo "$file"
done
如果要递归查找每个2010-06 *文件夹中的所有jpg文件,也不需要使用多个finds
或xargs
for directory in 2010-06*/
do
find $directory -iname "*.jpg" -type f
done
或者只是
find 2006-06* -type f -iname "*.jpg"
甚至更好,如果你有bash 4及以上
shopt -s globstar
shopt -s nullglob
for file in 2010-06*/**/*.jpg
do
echo "$file"
done