好的,所以我有一个脚本正在运行一个命令来获取文件名列表,但是其中一些可能实际上并不存在。我想做的是通过管道过滤此列表并删除任何实际不存在的文件名。
如果它有助于我使用的任何命令是 OS X 的 mdfind(Spotlight 搜索),给定一些搜索条件,它将快速返回匹配文件名的列表(实际上是绝对路径);问题是 Spotlight 可能会返回一些垃圾结果,通常是“错误路径”,所以我需要过滤掉这些结果,以便将列表传递给另一个程序。
好的,所以我有一个脚本正在运行一个命令来获取文件名列表,但是其中一些可能实际上并不存在。我想做的是通过管道过滤此列表并删除任何实际不存在的文件名。
如果它有助于我使用的任何命令是 OS X 的 mdfind(Spotlight 搜索),给定一些搜索条件,它将快速返回匹配文件名的列表(实际上是绝对路径);问题是 Spotlight 可能会返回一些垃圾结果,通常是“错误路径”,所以我需要过滤掉这些结果,以便将列表传递给另一个程序。
尝试mdfind
通过管道传递您的命令grep
:
mdfind __your-query-args__ | grep -iv "bad path"
假设你的 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