2014-11-12 1 views
0

Это один лайнер работает, цель:Возникают проблемы со скобками в UNIX найти и правильный синтаксис

  • поиск каталог
  • найти все файлы, которые новее, чем timestamp файл
  • , которые не названы .DS_Store
  • в противном случае укажите все остальные файлы.

Я придумал это, что работает, но я вижу примеры онлайн, которые используют множество круглых скобок, для которых я их не использую. Я думал, может быть лучше:

find /Users/$USER/Library/Messages/Attachments -not -name ".DS_Store" -not -name "timestamp" -name "*" -type f -newer /Users/$USER/Library/Messages/scripts/timestamp 

И в конечном счете, я хочу взять результаты и скопировать их в определенном месте. Для этого я собирался добавить это:

-exec cp {} archive_files/ \; 
+1

И в чем проблема при добавлении '-exec ...'? – anubhava

ответ

2

Вы могли объединить все -not выражения в круглых скобках группы, применяя de Morgan's Law:

-not \(-name .DS_Store -o -name timestamp \) 

Я не вижу смысла в вашей простой случай, но если у вас было много имен, чтобы исключить его, это могло бы быть более ясным.

+0

С другой стороны, использование '-regex' вместо' -name' позволит вам сделать его еще более компактным. – tripleee

+0

Быстрый вопрос, если я не хочу, чтобы имена были перезаписаны на 'cp', как бы я добавил серийный номер, я могу создать счетчик, но значение, как добавить его в pre-file-extension в команде find где происходит -exec cp? - Благодаря – Scott

Смежные вопросы