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.class
el problema es que hay muchos otros archivos inútiles, como archivos .svn-base, que no quiero. ¿Cómo puedo filtrarlos para que solo scp
tenga archivos .class?
99
Respuestas:
Probablemente recomendaría usar algo como
rsync
esto debido a sus banderasinclude
yexclude
, por ejemplo: -Algunas otras banderas útiles:
-r
por recursivo-a
para archivo (principalmente todos los archivos)-v
para una salida detallada-e
para especificar ssh en lugar del predeterminado (que debería ser ssh, en realidad)fuente
-a
ya incluye-r
según las páginas del manual de rsync.--prune-empty-dirs
eliminará 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
rsync
essh
instalarlo 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
srcdir
somedir
Elimine todos los archivos innecesarios:
encontrar somedir -name '.svn' -exec rm -rf {} \ +
lanzar scp desde
somedir
fuente
tar
ozip
. En cambio, no hay compresión (scp realiza la compresión) y el código 'empaquetado' se copia.