LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2128|回复: 11

请教一个比较文件夹的shell

[复制链接]
发表于 2003-9-16 09:59:03 | 显示全部楼层 |阅读模式
想比较两个文件夹下的文件,从中挑出来相同的,然后再执行其他的操作
我用
ls folder1>1;ls folder >2
comm -12 1 2
挑出来相同的文件。


现在想加一个语句对folder1和folder2是否有相同文件做一个判断,
我的办法比较笨

用 comm -12 1 2|wc -l 来返回一个值,然后判断这个值是否为0

还有更好的办法呢
发表于 2003-9-16 11:02:31 | 显示全部楼层
用diff也可以比较两个目录
 楼主| 发表于 2003-9-16 11:22:46 | 显示全部楼层
可是diff没有办法挑出来相同的元素。
发表于 2003-9-16 11:30:22 | 显示全部楼层
你是要比较相同的文件名而不顾他的内容是否相同,还是比较内容完全相同而不管他的文件名是否相同?
发表于 2003-9-16 11:33:24 | 显示全部楼层
最初由 coda 发表
可是diff没有办法挑出来相同的元素。

用diff dirname1 dirname2|grep diff 就可以找出文件名相同的文件
 楼主| 发表于 2003-9-16 12:09:08 | 显示全部楼层
   用diff dirname1 dirname2|grep diff 就可以找出文件名相同的文件

这个不行啊。

我的代码如下,大家帮忙看看,主要是实现在第一个文件夹内删除跟第二个文件夹内重名的文件。

#!/bin/bash
if [ $# -lt 2 ]
then
        echo More input is needed
        echo "Usage0 [folder containing duplicated file] [original folder]"
        exit 1
fi
        ls $1>1
        ls $2>2
        tmp="$(comm -12 1 2|wc -l)"
        if [ $tmp -eq 0 ]
        then
                echo no common files
        else
                echo This will remove all common files in $1 when compared two folders
                echo Common files are
                comm -12 1 2 |tee $1/3
                cd $1
                rm -i $(cat 3)
                rm 3
                cd -
                echo Removal complete
        fi
        rm 1 2
发表于 2003-9-16 12:20:30 | 显示全部楼层
:sorry,diff比较出来的是文件名相同而内容不一样的.
你的脚本不错 ;),那个comm -12 1 2|tee $1/3是什么意思? :ask
 楼主| 发表于 2003-9-16 16:26:33 | 显示全部楼层
呵呵,因为要删除folder1下相同的文件,所以比较简单的办法是在folder1下建立一个存有相同文件名的列表,即3,用tee $1/3就可以直接在folder1下建立文件3,并且在屏幕上回显出3的内容。
发表于 2003-9-16 22:25:04 | 显示全部楼层
在dir1下: for i in *; do rm /dir2/$i; done
如果要考虑子目录,就用for i in `find /dir1 --type f `;
然后处理掉前面的dir1,其他类似

大概这个意思,没考虑空格什么的,自己完善吧。。

总而言之,管它有没有,删就是了
发表于 2003-9-17 00:22:35 | 显示全部楼层
最初由 penny 发表
在dir1下: for i in *; do rm /dir2/$i; done
如果要考虑子目录,就用for i in `find /dir1 --type f `;
然后处理掉前面的dir1,其他类似

大概这个意思,没考虑空格什么的,自己完善吧。。

总而言之,管它有没有,删就是了

这样删除的只是文件名相同的吧!
不过要考虑的是文件名相同而内容不同的话,还得用diff,comm之类的来比较.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表