Gav*_*our 144
我可能会建议使用类似的东西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/
Run Code Online (Sandbox Code Playgroud)
其他一些有用的标志:
-r 用于递归-a 用于存档(主要是所有文件)-v 对于详细输出-e 指定ssh而不是默认值(实际应该是ssh)rgt*_*gtk 71
要在基目录中排除dotfiles:
scp -r [!.]* server:/path/to/something
Run Code Online (Sandbox Code Playgroud)
Vil*_*ari 35
scp中没有用于过滤文件的功能.对于像这样的"高级"东西,我建议使用rsync:
rsync -av --exclude '*.svn' user@server:/my/dir .
Run Code Online (Sandbox Code Playgroud)
(此行将rsync从远程文件夹复制到当前文件夹)
默认情况下,最新版本的rsync会自动通过ssh连接.
既然你可以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)
Run Code Online (Sandbox Code Playgroud)
返回(注销)到本地服务器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
Run Code Online (Sandbox Code Playgroud)
如果您发现$(find ...)焦油变化太长,
find . -type f -name *.class | xargs tar cfj pack.tar.bz2
Run Code Online (Sandbox Code Playgroud)
最后,既然你要保留它/usr/project/backup/,
为什么要费心去除?只需保留tar.bz2,可能是日期+时间戳.