Chinaunix

标题: 这个shell怎么写? [打印本页]

作者: aaaaal    时间: 2008-03-04 16:29
标题: 这个shell怎么写?
两个Linux PC 上的同一个文件夹(文件夹里有很多文件夹和文件,一台PC B上的目录是另一太PC A上的备份),PC A的目录里由于一些操作加了些文件和文件夹,现在想通过shell脚本把这些比 PC B上多的文件删除(不能直接从pc B上copy 整个目录过去,因为有些文件内容改了),请教大侠们该怎么写这个脚本啊?
作者: loveoov    时间: 2008-03-04 16:53
标题: 回复 #1 aaaaal 的帖子
貌似挺有难度的
我提供个思路如何
1.分别执行ls -lR 把结果重定向到文件1 2里面
2.比较两个文件 得到多余的文件信息
3.删掉多余的文件
作者: jiangxue1327    时间: 2008-03-04 17:17
可以利用diff,例如:
diff btest  btest-bak/ -r|grep '^Only in'|awk '{print $4}'
aa
bb
fjksdjf
jjtest
这些文件以及目录就是在btest目录中新增的目录,删除他们即可
作者: aaaaal    时间: 2008-03-04 17:23
标题: 回复 #3 jiangxue1327 的帖子
问题是他们不在一个pc上啊,而且也不能从一个pc拷贝到另一个pc
作者: seeLnd    时间: 2008-03-04 17:29
on A_host:

cd /path/to/A; find . | ssh user@B_host_ip  "cd /path/to/B; grep -vxFf <(find .)" | xargs rm -rf

或者

on B_host:

cd /path/to/B; find . | ssh user@A_host_ip  "cd /path/to/A; grep -vxFf <(cat) <(find .) | xargs rm -rf"

[ 本帖最后由 seeLnd 于 2008-3-4 17:47 编辑 ]
作者: loveoov    时间: 2008-03-04 17:47
标题: 回复 #5 seeLnd 的帖子


大哥能否具体解释下?小弟太菜了
作者: seeLnd    时间: 2008-03-04 18:13
标题: 回复 #6 loveoov 的帖子
分别在两台机器上运行find, 用grep找出不同,传递给rm去删除,
重点在于ssh的特性和grep的功能,以及bash的进程替换,
ssh的虚拟终端可以重定向远程进程的输入输出,
grep和进程替换你可以man一下或者看看本版精华




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2