Macos 如何使用模式将mdfind管道传输到grep,然后是cp

Macos 如何使用模式将mdfind管道传输到grep,然后是cp,macos,terminal,spotlight,Macos,Terminal,Spotlight,我一直在试图找到一个mdfind来定位某些文件。我没有使用find,因为在windows驱动器上搜索需要很长时间,而且我在Mac上。我已经使用mdutil编制了索引,现在只想搜索路径中文件以示例开头的模式的文件。“/Volumes/DRIVE/SOME/PATH/DAD14-BLAH-BLAH.jpg”。必须有一种更简单的方法来使用mdfind查找大于500k的jpg,并使用模式对路径进行grep?下面是我提出的代码,但没有返回结果。非常感谢您的帮助 cat filelist.txt | whi

我一直在试图找到一个mdfind来定位某些文件。我没有使用find,因为在windows驱动器上搜索需要很长时间,而且我在Mac上。我已经使用mdutil编制了索引,现在只想搜索路径中文件以示例开头的模式的文件。“/Volumes/DRIVE/SOME/PATH/DAD14-BLAH-BLAH.jpg”。必须有一种更简单的方法来使用mdfind查找大于500k的jpg,并使用模式对路径进行grep?下面是我提出的代码,但没有返回结果。非常感谢您的帮助

cat filelist.txt | while read -r FILE; 
   do mdfind -onlyin /Volumes/DRIVE/ 'kMDItemKind = "*image" && kMDItemFSSize > 500000' -name "$FILE" -0 
   | xargs -0 -I{} grep -i -E '.*\/[a-zA-Z]{1,3}[0-9]+.*\.(jpe?g|png|tiff?|psd)' {} 
   | xargs -0 -I{} cp -a {} ./images; done;

Bass

您不想对
grep
命令使用
xargs
。这样做意味着将找到的文件的内容变灰以匹配模式。您希望实际grep
mdfind
的输出

这也意味着您不想将
-0
mdfind
一起使用。您希望每个文件路径位于单独的行上,因为grep将输出匹配的行。因此,您也不希望在最后的
xargs
命令中使用
-0

您可能希望要求扩展名位于字符串的末尾。您希望模式中的显式斜杠(
/
)成为字符串中的最后一个斜杠

cat filelist.txt | while read -r FILE; 
   do mdfind -onlyin /Volumes/DRIVE/ 'kMDItemKind = "*image" && kMDItemFSSize > 500000' -name "$FILE" 
   | grep -i -E '.*\/[a-zA-Z]{1,3}[0-9]+[^/]*\.(jpe?g|png|tiff?|psd)$' 
   | xargs -I{} cp -a {} ./images; done;

感谢您的快速响应,我尝试了一下,但一直出现以下错误:xargs:用于参数的空间不足可能是文件名中有空格,因此我最初使用-0选项?哎呀,我忽略了从剩余的
xargs
中删除
-0
。我已经修好了,谢谢你!然而,我认为问题可能出在“kMDItemKind=“*image”&&kMDItemFSSize>500000”部分,我不知道为什么mdfind不喜欢这些属性?现在我得到了一个xargs:unterminated引号错误?