Ubuntu 12.04 LTS de 64 bits.
Estoy intentando hacer una copia de una tarea programada desde un directorio con miles de archivos a un recurso compartido de samba (omitiendo duplicados). Mapeé mi recurso compartido de Samba a través de la GUI.
El comando que probé:
cp /home/security/Brick/* ~/.gvfs/"cam en atm-bak-01.local/Brick" -n
Encontré esto pero no sé cómo cambiar la sintaxis a lo que necesito.
buscar -max Depth 1 -nombre '*.prj' -exec mv -t ../prjshp {} +
Cualquier sugerencia es muy apreciada.
Respuesta1
El problema es que el shell lo expande /home/security/Brick/*
con una lista larga (demasiado larga) de archivos.antespasándolo a cp
.
Si quieres copiar todo el Brick
directorio quizás lo más sencillo sería:
cp -rn /home/security/Brick ~/.gvfs/"cam on atm-bak-01.local"/
usando el indicador "recursivo" para cp
. Esto también copiará toda la estructura en Brick (incluidos los subdirectorios).
Una posibilidad es utilizar un for
bucle:
for file in /home/security/Brick/*;
do
cp -n $file ~/.gvfs/"cam on atm-bak-01.local/Brick"
done
O usando buscar:
find /home/security/Brick/ -type f -exec cp -n {} ~/.gvfs/"cam on atm-bak-01.local/Brick" \;
En este comando, -type f
dice que se seleccionen solo archivos (sin directorios), luego, para cada archivo se ejecuta el comando especificado: {}
se sustituye por el nombre del archivo y \;
es el punto y coma necesario para cerrar la -exec
cláusula; de lo contrario, el shell lo interpretará (y eliminará ).
El comando posterior -exec
podría ser el que desee (por ejemplo, en lugar de, cp -n
puede usarlo cp -av
para copiar en modo archivo (incluidas marcas de tiempo y propiedad) y sobrescribir, o puede usar otros comandos (pero: debes comprender los escapes de shell, el globbing y las comillas antes; de lo contrario, puedes causar mucho daño --- ver, por ejemplo"aprendiendo la concha").
Buscar es un comando muy poderoso; vale la pena aprenderlo bien. He encontrado tutoriales interesantes.aquí,aquíyaquí.
Acerca de hacer una copia de seguridad con cp -n
:
Tenga en cuenta que la -n
bandera no sobrescribirá los archivos existentes, por lo que si realiza cambios en un archivo en su directorio local que se copió anteriormente, lo hará.nose copiará nuevamente... y tendrás en la copia de seguridad la versión antigua del mismo.
Por esa razón recomiendo usar una utilidad de copia de seguridad o sincronización, comoUnísonoosincronización, para hacer este trabajo. Estas utilidades simplemente actualizarán los archivos modificados, pueden minimizar las escrituras (y por lo tanto el ancho de banda de la red) y, en general, son mucho más seguras. Tu copia de seguridad podría solucionarse rsync
simplemente diciendo:
rsync -azvv /home/security/Brick ~/.gvfs/"cam on atm-bak-01.local/Brick"
(tenga cuidado de no agregar un "/" final al final --- o rsync creará un subdirectorio Brick/Brick. Sí, rsync
es poderoso y bastante temperamental en algún momento).
Unison tiene una interfaz gráfica agradable y también le indicará si hay cambios conflictivos en su repositorio, por lo que esta sería mi opción preferida.