【问题标题】:Filter "bad path" results in mdfind在 mdfind 中过滤“错误路径”结果
【发布时间】:2013-04-12 02:47:37
【问题描述】:

好的,所以我有一个脚本正在运行一个命令来获取文件名列表,但是其中一些可能实际上并不存在。我想做的是通过管道过滤此列表并删除任何实际不存在的文件名。

如果它对我使用的任何命令有帮助,我使用的是 OS X 的 mdfind(Spotlight 搜索),在给定一些搜索条件的情况下,它将快速返回匹配文件名的列表(实际上是绝对路径);问题是 Spotlight 可能会返回一些垃圾结果,通常是“错误路径”,所以我需要过滤掉这些结果,以便将列表传递给另一个程序。

【问题讨论】:

  • 为什么有些文件不存在?

标签: macos shell command-line scripting


【解决方案1】:

尝试通过grep 传递您的mdfind 命令:

mdfind __your-query-args__ | grep -iv "bad path"

【讨论】:

  • 啊哈!感谢 Rodney 和@glenn,这两种方法都有效,但这一种方法似乎更干净,因为 mdfind 返回的项目实际上应该存在(对不起,如果我混淆了我的问题),我可能会通过 gzip 管道进入文件所以这应该是最容易使用的。
【解决方案2】:

假设你的 shell 是 bash:

result=()
mdfind ... | while IFS= read -r filename; do
  [[ -e $filename ]] && result+=("$filename")
done

IFS=-r 位用于正确处理带有空格或转义字符的文件。

数组result 包含现有文件。将其用作"${result[@]}"(带引号)的列表或使用

对其进行迭代
for file in "${result[@]}"; do something "$file"; done

【讨论】:

    猜你喜欢
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 2015-08-11
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    相关资源
    最近更新 更多