我需要将所有.class文件从服务器复制到本地,并保留所有目录。例如server:/usr/some/unknown/number/of/sub/folders/me.class
将是/usr/project/backup/some/unknown/number/of/sub/folders/me.class
问题是,还有许多其他无用的文件,例如.svn-base文件,我不想要。我如何过滤它们,所以我只有scp
.class文件?如何在使用scp递归复制dir时过滤文件?
回答
我可能会建议使用像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,实际上)
无论如何,要忽略其中没有* class文件的子文件夹? (也就是说我不想要一堆空的子弹) – 2013-10-25 15:09:23
源文件夹复制到
somedir
:CP -r
srcdir
somedir
删除所有不必要的文件:
找到somedir -name '.svn文件' -exec室射频{} \ +
从
somedir
启动scp
在scp中没有功能来过滤文件。对于这样的“先进”的东西,我建议使用rsync:
rsync -av --exclude '*.svn' [email protected]:/my/dir .
(这条线的副本从遥远的文件夹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)
回报回(注销)到本地服务器和scp
,
# from the local machine
cd /usr/project/backup/some/unknown/number/of/sub/folders
scp [email protected]:/usr/some/unknown/number/of/sub/folders/pack.tar.bz2 .
tar xfj pack.tar.bz2
如果您发现是您的焦油变化太久,
find . -type f -name *.class | xargs tar cfj pack.tar.bz2
最后,因为您把它/usr/project/backup/
,
何苦提取?只需保留tar.bz2
,可能有日期+时间戳。
要排除的dotfiles在基本目录:
scp -r [!.]* server:/path/to/something
使用基于SSH密钥认证功能,下面的脚本会工作。
for x in `ssh [email protected] 'find /usr/some -type f -name *.class'`; do y=$(echo $x|sed 's/.[^/]*$//'|sed "s/^\/usr//"); mkdir -p /usr/project/backup$y; scp $(echo '[email protected]:'$x) /usr/project/backup$y/; done
下面的文件命令。
SCP`找到。 -maxdepth 1 -name“* .log”\! -name“hs_err_pid2801.log”-type f` root @ IP:/ tmp/test/
- IP将是目标服务器的IP地址。
- -name “* .LOG” 包含文件。
- \! -name“hs_err_pid2801.log”用于排除文件。
- 。是当前工作目录。
- -type f用于文件类型。
以下命令目录。
SCP -r`找到。 -maxdepth 1 -name“lo *”\! -name “localhost” 的型D'根@ IP:/ tmp/test目录/
您可以自定义上面的命令按您的要求。
- 1. 通过scp复制文件
- 2. Scp命令无需递归复制特定文件夹
- 3. 如何递归复制目录并在Perl中过滤文件名?
- 4. CMake使用copy_if_different递归复制文件
- 5. C - 递归复制文件
- 6. 递归复制文件
- 7. 如何使用部分复制的文件恢复scp?
- 8. NSIS - 如何在排除文件的同时递归复制?
- 9. 如何使用qmake递归复制文件
- 10. 如何递归滤波点文件出在bash使用find?
- 11. 复制文件递归在Python
- 12. 在node.js中递归复制文件夹
- 13. 如何在使用递归制作时避免这些重复?
- 14. 混帐difftool --dir-DIFF:如何复制回修改过的文件
- 15. Ant:如何在使用“过滤”复制xml文件时xml-escape属性值
- 16. 使用scp在文件名中使用空格复制文件文件
- 17. 复制递归文件和文件夹,但跳过父项
- 18. 在Python中跳过一些目录递归复制文件?
- 19. dir()/ find()过滤掉隐藏文件
- 20. Java递归文件复制优化
- 21. 使用gcloud compute scp在实例之间复制文件
- 22. 如何用scp将文件复制到ec2 instace?
- 23. 使用g ++递归制作.O文件?
- 24. 如何递归不使用/ S运行DIR命令切换
- 25. 如何在使用递归时创建2个csv文件
- 26. net :: scp复制/覆盖文件夹
- 27. SCP/Bash回显复制的文件?
- 28. msysgit的scp无法复制大文件
- 29. 使用MSBuild目标从NuGet包中递归复制文件
我想提到的rsync的选项。你没有提到这是一次性操作,还是反复自动化。对于一次性操作,明智地使用find,grep -v,xargs和临时文件应该简化这个工作。 – user47559 2009-08-04 16:40:53