Поиск и копирование в несколько подкаталогов

#unix #terminal #find

#unix #терминал #Найти

Вопрос:

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

 find . -type d -name 'Preferences' -maxdepth 3 -exec cp -r {} /Users/ladmin/Desktop/source.plist *Library/Preferences ;
  

Запуск только этого

 find . -type d -name 'Preferences' -maxdepth 3
  

выводит то, что я пытаюсь скопировать в username/Library/Preferences

Затем я хочу скопировать список в папку настроек каждого пользователя.

Я надеюсь, что это не слишком сложно для чтения людьми.

Спасибо, Крис

Ответ №1:

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

  • find является рекурсивным и cp -r рекурсивным, и оба они пересекают одно и то же дерево. Вы можете добавить -prune тест find , чтобы остановить его от убывания найденных каталогов
  • Не уверен, влияет ли это на что-либо здесь, но find обычно любит options (т. Е. -maxdepth ) быть первым.
  • *Library/Preferences если это расширяется до нескольких путей, все они, кроме одного, будут скопированы в последний.

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

 find -maxdepth 3 -type d -name 'Preferences' -prune -exec echo cp -ivr {} /Users/ladmin/Desktop/source.plist username/Library/Preferences  
  

Это устраняет все первые проблемы, но из вопроса неясно, что должно произойти, когда каталог с таким именем уже существует. -iv Вам будет предложено, хотите ли вы переопределить при возникновении конфликтов и добавить некоторую детализацию. Ускоряет выполнение find команд for, которые могут принимать несколько имен файлов / каталогов (например cp ).