Хотел бы скопировать каждый файл из структуры каталогов в конкретный каталог, только если файл там еще не существует.
Получил первую часть из этого вопроса переполнения стека :
find . -type f -exec cp {} /target-directory \;
Как я могу проверить, существует ли файл или нет? Если нет, скопируйте файл, иначе пропустите.
command-line
bash
files
find
мистер ау
источник
источник
Ответы:
Вы можете использовать
-u
переключатель изcp
команды:или используйте
rsync
команду с--ignore-existing
:Пример:
источник
Ваша оригинальная команда может быть переписана как:
Ключевым моментом здесь является то, что мы вызываем shell с конкретными командами и передаем найденный файл в качестве
$1
аргумента. Если происходитtest -e /target-directory/"$1"
сбой, это означает, что файл не существует, и в этом случаеcp
будет скопировать файл.В общем, можно использовать другие команды, если команда может проверить существование файла. Некоторые из других альтернатив:
/usr/bin/realpath -e /target-directory/"$1" > /dev/null || cp "$1" /target-directory
stat >/dev/null /target-directory/"$1" || cp "$1" /target-directory/"$1"
источник
stat
проверять наличие файлов в Bash? Не былоtest -e
бы намного проще?Прочитайте
man cp
и используйте--no-clobber
опцию дляcp
.источник