Me gustaría copiar cada archivo de una estructura de directorio a un directorio específico solo si el archivo no existe allí.
Obtuve la primera parte de esta pregunta de desbordamiento de pila :
find . -type f -exec cp {} /target-directory \;
¿Cómo puedo verificar si el archivo existe o no? Si no, copie el archivo, de lo contrario, omita.
command-line
bash
files
find
señor au
fuente
fuente

Respuestas:
Puede usar el
-uinterruptor delcpcomando:o use el
rsynccomando con--ignore-existing:Ejemplo:
fuente
Su comando original se puede reescribir como:
La clave aquí es que llamamos a shell con comandos específicos y pasamos el archivo encontrado como
$1argumento. Sitest -e /target-directory/"$1"falla, eso significa que el archivo no existe, en cuyo casocpcopiará el archivo.En general, uno puede usar otros comandos, siempre que el comando pueda verificar la existencia de un archivo. Algunas de las otras alternativas:
/usr/bin/realpath -e /target-directory/"$1" > /dev/null || cp "$1" /target-directorystat >/dev/null /target-directory/"$1" || cp "$1" /target-directory/"$1"fuente
statprobar la existencia de archivos en Bash? ¿Notest -esería mucho más simple?Lea
man cpy use la--no-clobberopción paracp.fuente