我需要将所有.class文件从服务器复制到本地,并保留所有目录。例如,server:/usr/some/unknown/number/of/sub/folders/me.class
将/usr/project/backup/some/unknown/number/of/sub/folders/me.class
可问题是,还有许多其他无用的文件,如的.svn基文件我不想。我该如何过滤它们,以便仅使用scp
.class文件?
我需要将所有.class文件从服务器复制到本地,并保留所有目录。例如,server:/usr/some/unknown/number/of/sub/folders/me.class
将/usr/project/backup/some/unknown/number/of/sub/folders/me.class
可问题是,还有许多其他无用的文件,如的.svn基文件我不想。我该如何过滤它们,以便仅使用scp
.class文件?
Answers:
rsync
由于其include
和exclude
标志,我可能建议为此使用类似的东西,例如:
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/
其他一些有用的标志:
-r
用于递归-a
用于存档(主要是所有文件)-v
用于详细输出-e
指定ssh而不是默认值(实际上应该是ssh)-a
已包含在内-r
。
--prune-empty-dirs
将删除空目录。
要在基本目录中排除点文件:
scp -r [!.]* server:/path/to/something
[!.]*
是一个外壳文件,可扩展到工作目录中的所有文件,而不以点开头。
scp中没有过滤文件的功能。对于像这样的“高级”东西,我建议使用rsync:
rsync -av --exclude '*.svn' user@server:/my/dir .
(此行将rsync从远程文件夹复制到当前文件夹)
默认情况下,ssync连接上的rsync隧道的最新版本是自动的。
既然你可以scp
,你应该确定ssh
,
无论是脚本以下或登录并执行...
# After reaching the server of interest
cd /usr/some/unknown/number/of/sub/folders
tar cfj pack.tar.bz2 $(find . -type f -name *.class)
返回(注销)到本地服务器,然后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
如果您发现$(find ...)
tar太长而无法更改为tar,
find . -type f -name *.class | xargs tar cfj pack.tar.bz2
最后,既然您将其保留在其中/usr/project/backup/
,
为什么还要麻烦提取呢?只需保留tar.bz2
,可能要加上日期和时间戳。
rsync
和ssh
安装。相反,这是一个聪明的解决方法。谢谢!
以下命令用于文件。
scp`查找。-maxdepth 1 -name“ * .log” \!-名称“ hs_err_pid2801.log”-键入f` root @ IP:/ tmp / test /
下面的命令用于目录。
scp -r`find。-maxdepth 1-名称“ lo *” \!-名称“本地主机”-键入d` root @ IP:/ tmp / test /
您可以根据需要自定义上述命令。
如果您确实想使用scp,则有一种间接方法。假设我们要将本地文件夹“ / src”下的所有.jpg文件复制到远程服务器10.1.1.2中的文件夹“ / dst”:
#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
scp -i /home/<user>/.ssh/id_rsa -o "StrictHostKeyChecking=no" -rp /source/directory/path/[!.]* <target_user>@<target_system:/destination/directory/path
将您的源文件夹复制到somedir
:
cp -r srcdir
somedir
删除所有不需要的文件:
找到somedir -name'.svn'-exec rm -rf {} \ +
从启动scp somedir
tar
或zip
-file文件中的步骤之前。相反,没有压缩(scp进行压缩),并且“打包的”代码被复制过来。