分页: 1 / 1
怎么吧md5一样的文件全部做成符号连接
发表于 : 2008-05-05 11:54
由 ttand
某些图标主题 同样的文件很多,
我想 把一样的文件都只留一个 其余的都做成连接
find -type f -exec md5sum {} +|sort
这样可以按md5 hash 分组
后面是否一定要用条件和循环结构
发表于 : 2008-05-05 11:58
由 yaoms
想法不错。不过实现起来比较困难。。 用 perl 或者 python 吧
发表于 : 2008-05-05 12:53
由 xiechy
for i in *
do
for j in *
if diff $i $j >/dev/null
then
ln -sf $i $j
fi
done
done
发表于 : 2008-05-05 13:03
由 ttand
xiechy 写了:for i in *
do
for j in *
if diff $i $j >/dev/null
then
ln -sf $i $j
fi
done
done
我开始也这样想 不过 i 和 j 等于同一个文件时候 会怎么样??
且 i,j 是相关的 这样不好吧
发表于 : 2008-05-05 13:38
由 laborer
给你一个思路
代码: 全选
find -maxdepth 1 -type f -exec md5sum {} \; |
awk '{ if (A[$1]) system("echo ln -sf "A[$1]" "$2); else A[$1]=$2 }'
不过想要做到比较完备,比如支持目录,支持带空格的文件名等等,还是需要不少考虑的。
发表于 : 2008-05-05 14:30
由 ttand
laborer 写了:给你一个思路
代码: 全选
find -maxdepth 1 -type f -exec md5sum {} \; |
awk '{ if (A[$1]) system("echo ln -sf "A[$1]" "$2); else A[$1]=$2 }'
不过想要做到比较完备,比如支持目录,支持带空格的文件名等等,还是需要不少考虑的。
天哪看不懂awk 我还是把常用的工具熟悉一下再来
发表于 : 2008-05-05 17:43
由 xiechy
ttand 写了:xiechy 写了:for i in *
do
for j in *
if diff $i $j >/dev/null
then
ln -sf $i $j
fi
done
done
我开始也这样想 不过 i 和 j 等于同一个文件时候 会怎么样??
且 i,j 是相关的 这样不好吧
diff 和 ln 没那么傻吧 他们自己会处理的 你可以先做个试验 反正我试了没出现问题
发表于 : 2008-05-05 19:19
由 ttand
xiechy
文件少可以用
多的话就崩溃了
就是 i,j相关
连來连去 层数过多
diff 比 md5 然后 sort 慢多了
跑了很久 最后 nautilus 挂了 不支持那么多层的符号链吧
发表于 : 2008-05-05 19:47
由 ttand
ok了
代码: 全选
#!/bin/sh
for i in *
do
for j in *
do
if ! [ -h $i ]
then
if ! [ -h $j ]
then #还有其他写法没有.......
if [ $i != $j ]
then
if diff $i $j >/dev/null
then
ln -sf $i $j
echo "lnk"
fi
fi
fi
fi
done
done
发表于 : 2008-05-05 20:05
由 xiechy
我错了
试试这个吧
代码: 全选
#!/usr/bin/bash
file=($(ls))
for((i = 0; i < ${#file[@]}; i++))
do
if ! [ -h "${file[$i]}" ]
then
for((j = $i + 1; j < ${#file[@]}; j++))
do
if ! [ -h "${file[$j]}" ]
then
if diff ${file[$i]} ${file[$j]} >/dev/null
then
ln -sf ${file[$i]} ${file[$j]}
fi
fi
done
fi
done
发表于 : 2008-05-05 20:07
由 xiechy
发完抬头 晕了

发表于 : 2008-05-05 22:05
由 eexpress
肯定先建立列表的了。sort 可以用到。uniq可以作一个比较副本。
发表于 : 2008-05-05 22:23
由 ttand
可以了 现在nuoveXT.2.2的主题包容量降到一半
xiechy那种蛮力法 i j循环遍历。然后就是只要两个都是非符号连接的文件,且不是同一个 就比较,相同就连接。
应该没有漏网的。不过也有缺点 只能工作在一个目录下,最后还是用 find -type d |xargs作引子 用此脚本接受xarg的文件夹路径参数,然后cd 然后 继续弄。。。。
很慢而且不能跨文件夹 ln -sf
改天有空做个纯管道的
