Lista de argumentos demasiado larga y copiando a Samba Share

Lista de argumentos demasiado larga y copiando a Samba Share

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 Brickdirectorio 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 forbucle:

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 fdice 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 -execcláusula; de lo contrario, el shell lo interpretará (y eliminará ).

El comando posterior -execpodría ser el que desee (por ejemplo, en lugar de, cp -npuede usarlo cp -avpara 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 -nbandera 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 rsyncsimplemente 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í, rsynces 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.

información relacionada