Gostaria de copiar todos os arquivos de uma estrutura de diretórios para um diretório específico apenas se o arquivo ainda não existir.
Obteve a primeira parte desta pergunta do Stack Overflow :
find . -type f -exec cp {} /target-directory \;
Como posso verificar se o arquivo existe ou não? Caso contrário, copie o arquivo, caso contrário, pule.
command-line
bash
files
find
senhor au
fonte
fonte
Respostas:
Você pode usar o comando
-u
switch fromcp
:ou use o
rsync
comando com--ignore-existing
:Exemplo:
fonte
Seu comando original pode ser reescrito como:
A chave aqui é que chamamos shell com comandos específicos e passamos o arquivo encontrado como
$1
argumento. Setest -e /target-directory/"$1"
falhar, isso significa que o arquivo não existe; nesse casocp
, o arquivo será copiado.Em geral, é possível usar outros comandos, desde que o comando possa verificar a existência de um arquivo. Algumas das outras alternativas:
/usr/bin/realpath -e /target-directory/"$1" > /dev/null || cp "$1" /target-directory
stat >/dev/null /target-directory/"$1" || cp "$1" /target-directory/"$1"
fonte
stat
que testar a existência de arquivos no Bash? Nãotest -e
seria muito mais simples?Leia
man cp
e use a--no-clobber
opção paracp
.fonte