Macos 如何使用模式将mdfind管道传输到grep,然后是cp
我一直在试图找到一个mdfind来定位某些文件。我没有使用find,因为在windows驱动器上搜索需要很长时间,而且我在Mac上。我已经使用mdutil编制了索引,现在只想搜索路径中文件以示例开头的模式的文件。“/Volumes/DRIVE/SOME/PATH/DAD14-BLAH-BLAH.jpg”。必须有一种更简单的方法来使用mdfind查找大于500k的jpg,并使用模式对路径进行grep?下面是我提出的代码,但没有返回结果。非常感谢您的帮助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
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
。这样做意味着将找到的文件的内容变灰以匹配模式。您希望实际grepmdfind
的输出
这也意味着您不想将-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引号错误?