我需要将所有.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进行压缩),并且“打包的”代码被复制过来。