¿Cómo filtrar archivos cuando se usa scp para copiar dir recursivamente?


Necesito copiar todo el .archivos de clase del servidor al local con todos los dir reservados. por ejemplo, server:/usr/some/unknown/number/of/sub/folders/me.class será /usr/project/backup/some/unknown/number/of/sub/folders/me.class el problema es que hay muchos otros archivos inútiles como .svn-archivos base que no quiero. ¿cómo puedo filtrarlos para que solo scp.¿archivos de clase?

Author: derrdji, 2009-08-04

8 answers

Probablemente recomendaría usar algo como rsync para esto debido a sus banderas include y exclude, por ejemplo: -

rsync -rav -e ssh --include '*/' --include='*.class' --exclude='*' \
server:/usr/some/unknown/number/of/sub/folders/ \ 
/usr/project/backup/some/unknown/number/of/sub/folders/

Algunas otras banderas útiles:

  • -r para recursivo
  • -a para el archivo (en su mayoría todos los archivos)
  • -v para una salida detallada
  • -e para especificar ssh en lugar del valor predeterminado (que debería ser ssh, en realidad)
 131
Author: Gavin Gilmour,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-10 15:54:06

Para excluir dotfiles en el directorio base:

scp -r [!.]* server:/path/to/something
 54
Author: rgtk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-17 17:47:39

No hay ninguna característica en scp para filtrar archivos. Para cosas" avanzadas " como esta, recomiendo usar rsync:

rsync -av --exclude '*.svn' user@server:/my/dir .

(esta línea copia rsync de la carpeta distante a la actual)

Las versiones recientes de rsync hacen un túnel sobre una conexión ssh automáticamente por defecto.

 32
Author: Ville Laurikari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-03 08:48:13

Ya que puedes scp deberías estar bien a ssh,
escriba el siguiente script o inicie sesión y ejecute...

# After reaching the server of interest
cd /usr/some/unknown/number/of/sub/folders
tar cfj pack.tar.bz2 $(find . -type f -name *.class)

Regresar (cerrar sesión) al servidor local y scp,

# from the local machine
cd /usr/project/backup/some/unknown/number/of/sub/folders
scp you@server:/usr/some/unknown/number/of/sub/folders/pack.tar.bz2 .
tar xfj pack.tar.bz2

Si encuentra que el $(find ...) es demasiado largo para su cambio de tar,

find . -type f -name *.class | xargs tar cfj pack.tar.bz2

Finalmente, ya que lo estás guardando en /usr/project/backup/,
¿por qué molestarse en la extracción? Solo mantén el tar.bz2, con tal vez una marca de fecha+hora.

 8
Author: nik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-04 17:14:45

Con la autenticación basada en clave ssh habilitada, el siguiente script funcionaría.

for x in `ssh user@remotehost 'find /usr/some -type f -name *.class'`; do y=$(echo $x|sed 's/.[^/]*$//'|sed "s/^\/usr//"); mkdir -p /usr/project/backup$y; scp $(echo 'user@remotehost:'$x) /usr/project/backup$y/; done
 1
Author: varun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-04 11:23:06

Debajo del comando para archivos.

Scp `find . - maxdepth 1-nombre"*.log"\! -nombre "hs_err_pid2801.registro "- tipo f " root@IP:/tmp/test /

  1. IP será la dirección IP del servidor de destino.
  2. -nombre "*.log " para incluir archivos.
  3. \! -nombre "hs_err_pid2801.log " para excluir archivos.
  4. . está trabajando dir actual.
  5. -tipo f para el tipo de archivo.

Debajo del comando para el directorio.

Scp-r `find . - maxdepth 1-nombre " lo*"\! -nombre "localhost" tipo d" root@IP:/tmp/test /

Puede personalizar el comando anterior según sus requisitos.

 0
Author: Suneet Khurana,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-29 17:42:57

Si realmente quieres usar scp, hay una forma indirecta.Digamos que queremos copiar todo .archivo jpg en la carpeta local' / src 'a la carpeta' / dst ' en el servidor remoto 10.1.1.2:

#make a clean temp folder
mkdir /tmp/ttt
#copy all .jpg file and retain folder structure as-is
find /src -type f -name *.jpg -exec cp --parents \{\} /tmp/ttt \;
#copy to remote target folder as-is and retain original time attributes
scp -rp /tmp/ttt/* 10.1.1.2:/dst
#if copy ok, remove temp folder
rm -rf /tmp/ttt
 0
Author: Scott Chu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-22 12:56:11
  1. Copie su carpeta de origen a somedir:

    Cp-r srcdir somedir

  2. Elimina todos los archivos innecesarios:

    Find somedir-name '.svn ' - exec rm-rf {} \ +

  3. Lanzamiento de scp desde somedir

 -1
Author: dfa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-04 16:21:11