#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
).