1

//// решено ////

Я пытаюсь скопировать несколько файлов, разбросанных по структуре каталогов, в другой, где такие файлы уже существуют, но без разрешения на запись разрешено. Поэтому я использовал команду find с двумя опциями -exec (опция -ok здесь только для отладки), первая для команды chmod и вторая для команды cp с двумя ссылками на {}.

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

Я знаю, что могу сделать это с помощью других инструментов (sed, awk, perl, bash script, отправить результаты поиска в файл и обработать его на втором этапе, ...), но я подумал, что этот способ проще.

Знаете ли вы, существует ли какой-либо способ заставить его работать? Заранее спасибо.

$ cd ~/sourceBranch/
$ find . \( -name '*.h*' -o -name '*.c*' \) -a -ctime -1 -ok chmod -v u+w /tmp/destBranch/{} \; -ok cp -uv {} /tmp/destBranch/{} \;

Однако я получаю этот вывод (отображается только для первого найденного файла):

< chmod ... ./Node/Db/UtilCLib/src/Constants.cc > ? yes  
mode of `/tmp/destBranch/' retained as 0755 (rwxr-xr-x)  <--- wrong path
< cp ... ./Node/Db/UtilCLib/src/Constants.cc > ? y
`./Node/Db/UtilCLib/src/Constants.cc' -> `/tmp/destBranch/Constants.cc'  <--- wrong path

1 ответ1

1

После отправки этого вопроса я понял, что забыл защитить переменные {} кавычками! Теперь это работает правильно. Извините, если вы потеряли время, прочитав его.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .