¿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?
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)
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
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.
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.
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
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 /
- IP será la dirección IP del servidor de destino.
- -nombre "*.log " para incluir archivos.
- \! -nombre "hs_err_pid2801.log " para excluir archivos.
- . está trabajando dir actual.
- -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.
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
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
-
Copie su carpeta de origen a
somedir
:Cp-r
srcdir
somedir
-
Elimina todos los archivos innecesarios:
Find somedir-name '.svn ' - exec rm-rf {} \ +
Lanzamiento de scp desde
somedir
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