好吧,所以我有一個腳本運行命令來獲取文件名列表,但其中一些可能實際上不存在。我想要做的是通過管道過濾這個列表並刪除任何實際不存在的文件名。過濾器「壞路徑」結果mdfind
如果它幫助我使用的命令是OS X的mdfind(Spotlight搜索),給定一些搜索條件,它將快速返回匹配文件名列表(實際上,絕對路徑);問題在於Spotlight可能會返回一些垃圾結果,通常是「不良路徑」,所以我需要過濾掉這些結果,以便將列表傳遞給另一個程序。
好吧,所以我有一個腳本運行命令來獲取文件名列表,但其中一些可能實際上不存在。我想要做的是通過管道過濾這個列表並刪除任何實際不存在的文件名。過濾器「壞路徑」結果mdfind
如果它幫助我使用的命令是OS X的mdfind(Spotlight搜索),給定一些搜索條件,它將快速返回匹配文件名列表(實際上,絕對路徑);問題在於Spotlight可能會返回一些垃圾結果,通常是「不良路徑」,所以我需要過濾掉這些結果,以便將列表傳遞給另一個程序。
試圖通過grep
管道的mdfind
命令:
mdfind __your-query-args__ | grep -iv "bad path"
啊哈!感謝Rodney和@glenn,這兩種方法都可以工作,但這個似乎是兩者的更清潔,因爲mdfind返回的項目實際上應該存在(對不起,如果我混淆了我的問題),我可能會通過gzip管道並進入一個文件這應該是最簡單的工作。 – Haravikk
假設你的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
迭代它爲什麼某些文件不存在? –