2013-04-18 1 views
1

Хорошо, поэтому у меня есть скрипт, который запускает команду, чтобы получить список имен файлов, однако некоторые из них могут не существовать на самом деле. То, что я хотел бы сделать, это отфильтровать этот список через канал и удалить любое имя файла, которое на самом деле не существует.Отфильтровать «плохой путь» в mdfind

В случае, если он помогает любой команде, которую я использую, является mdfind OS X (поиск Spotlight), который, учитывая некоторые критерии поиска, быстро вернет список совпадающих имен файлов (фактически, абсолютных путей); проблема в том, что Spotlight может возвращать некоторые результаты мусора, обычно «плохой путь», поэтому мне нужно отфильтровать их, чтобы я мог передать список в другую программу.

+0

Почему некоторые файлы не существуют? –

ответ

1

Попробуйте обжигающе вашу команду mdfind через grep:

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

Aha! Спасибо Родни и @glenn, оба метода работают, но этот кажется чище двух, поскольку элементы, возвращаемые mdfind, должны фактически существовать (извините, если я смутил мой вопрос), и я, вероятно, буду проходить через gzip и в файл, так что с этим должно быть проще всего работать. – Haravikk

1

Предполагая, что вы используете оболочку Баш:

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 
Смежные вопросы