Necesito copiar todos los archivos .class del servidor al local con todos los directorios reservados. Por ejemplo server:/usr/some/unknown/number/of/sub/folders/me.class, /usr/project/backup/some/unknown/number/of/sub/folders/me.classel problema es que hay muchos otros archivos inútiles, como archivos .svn-base, que no quiero. ¿Cómo puedo filtrarlos para que solo scptenga archivos .class?
99

Respuestas:
Probablemente recomendaría usar algo como
rsyncesto debido a sus banderasincludeyexclude, por ejemplo: -Algunas otras banderas útiles:
-rpor recursivo-apara archivo (principalmente todos los archivos)-vpara una salida detallada-epara especificar ssh en lugar del predeterminado (que debería ser ssh, en realidad)fuente
-aya incluye-rsegún las páginas del manual de rsync.--prune-empty-dirseliminará los directorios vacíos.Para excluir archivos dot en el directorio base:
[!.]*es un globo de shell que se expande a todos los archivos en el directorio de trabajo que no comienzan con un punto.fuente
No hay ninguna función en scp para filtrar archivos. Para cosas "avanzadas" como esta, recomiendo usar rsync:
(esta línea copia rsync de la carpeta distante a la actual)
Versiones recientes del túnel rsync a través de una conexión ssh automáticamente de forma predeterminada.
fuente
Ya que puede
scp, debería estar de acuerdossh,ya sea con el siguiente script o inicie sesión y ejecute ...
volver (cerrar sesión) al servidor local y
scp,Si encuentra que
$(find ...)es demasiado largo para que su alquitrán cambie a,Finalmente, ya que lo está guardando
/usr/project/backup/,¿por qué molestarse en la extracción? Solo mantén el
tar.bz2, quizás con un sello de fecha y hora.fuente
rsyncesshinstalarlo en el sistema operativo. En cambio, esta fue una solución inteligente. ¡Gracias!Debajo del comando para archivos.
scp `encontrar. -maxdepth 1 -name "* .log" \! -nombre "hs_err_pid2801.log" -type f` root @ IP: / tmp / test /
Debajo del comando para el directorio.
scp -r `buscar. -maxdepth 1 -name "lo *" \! -nombre "localhost" -type d` root @ IP: / tmp / test /
Puede personalizar el comando anterior según sus necesidades.
fuente
Con la autenticación basada en clave ssh habilitada, el siguiente script funcionaría.
fuente
Si realmente desea usar scp, hay una forma indirecta. Digamos que queremos copiar todo el archivo .jpg en la carpeta local '/ src' a la carpeta '/ dst' en el servidor remoto 10.1.1.2:
fuente
fuente
Copie su carpeta de origen en
somedir:cp -r
srcdirsomedirElimine todos los archivos innecesarios:
encontrar somedir -name '.svn' -exec rm -rf {} \ +
lanzar scp desde
somedirfuente
tarozip. En cambio, no hay compresión (scp realiza la compresión) y el código 'empaquetado' se copia.