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
-u
interruptor delcp
comando:o use el
rsync
comando 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
$1
argumento. Sitest -e /target-directory/"$1"
falla, eso significa que el archivo no existe, en cuyo casocp
copiará 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-directory
stat >/dev/null /target-directory/"$1" || cp "$1" /target-directory/"$1"
fuente
stat
probar la existencia de archivos en Bash? ¿Notest -e
sería mucho más simple?Lea
man cp
y use la--no-clobber
opción paracp
.fuente