Как подключить mdfind к grep с шаблоном, а затем cp

Я пытался придумать mdfind, чтобы найти определенные файлы. Я не использую find, потому что поиск на диске Windows занимает слишком много времени, а я работаю на Mac. Я проиндексировал с помощью mdutil и теперь просто хочу искать файлы по шаблону, где файл в пути начинается с примера. "/Volumes/DRIVE/SOME/PATH/DAD14-BLAH-BLAH.jpg". Должен ли быть более простой способ использовать mdfind для поиска jpg размером более 500 КБ и поиска пути по шаблону? Ниже приведен код, который я придумал, но результаты не возвращаются. Любая помощь приветствуется.

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;

Бас


person user5188505    schedule 13.03.2017    source источник


Ответы (1)


Вы не хотите использовать xargs для команды grep. Это означает поиск содержимого найденных файлов на соответствие шаблону. Вы действительно хотите получить вывод mdfind.

Это также означает, что вы не хотите использовать -0 с mdfind. Вы хотите, чтобы каждый путь к файлу находился на отдельной строке, так как grep будет выводить совпадающие строки. Поэтому вы также не хотите использовать -0 с последней командой xargs.

Возможно, вы захотите, чтобы расширение было в конце строки. И вы хотите, чтобы явная косая черта (/) в вашем шаблоне была последней косой чертой в строке.

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;
person Ken Thomases    schedule 13.03.2017
comment
Спасибо за быстрый ответ, я пробовал, но постоянно получаю следующую ошибку: xargs: недостаточно места для аргумента - person user5188505; 13.03.2017
comment
Может быть, в имени файла есть пробелы, поэтому я изначально использовал параметр -0? - person user5188505; 13.03.2017
comment
К сожалению, я забыл удалить -0 из оставшихся xargs. Я исправил это. - person Ken Thomases; 13.03.2017
comment
Спасибо вам за это! Однако я думаю, что проблема может заключаться в разделе 'kMDItemKind = *image && kMDItemFSSize › 500000' и понятия не имею, почему mdfind не нравятся эти атрибуты? - person user5188505; 14.03.2017
comment
Теперь я получаю сообщение об ошибке xargs: unterminated quote? - person user5188505; 14.03.2017