請問 如何找出磁碟中 重複 的檔案?

如果您覺得您的問題不屬於 debian desktop 或是 debian server 版的範圍內,請在這裡發問。

版主: mufa

請問 如何找出磁碟中 重複 的檔案?

文章bsdson.tw » 週三 2月 22, 2006 12:09 pm

在Windows下,有不少工具可以幫助使用者找出『重複的檔案』
甚至是兩張相同的照片,但是不同檔名,
請問在Linux下有類似的工具嗎?
或是可以怎麼用各種工具搭配使用以達相同的功能?
謝謝喔!

在moto有搜尋過,但似乎沒有相關的資料~
bsdson.tw
可愛的小學生
可愛的小學生
 
文章: 67
註冊時間: 週一 4月 11, 2005 4:44 pm

文章ericosur » 週三 2月 22, 2006 1:26 pm

有一個 duff 是 command line 的工具,可以到 sorceforge.net 找到。

想反過來請教有什麼 Windows 下,open source / freeware 的這類
工具嗎?不大想用 shareware 的,謝謝!
ericosur
可愛的小學生
可愛的小學生
 
文章: 4
註冊時間: 週四 11月 24, 2005 5:58 pm

文章bsdson.tw » 週二 3月 07, 2006 11:11 am

感謝你的回應,
不過我發問當天就用php試做了一個小程式,
基本原理跟duff類似,
茲轉錄如下,有需要可以拿去參考,跟duff不同的地方在於:
1.我用crc作checksum,他用sha之類了
2.在checksum之前,他還多做了一次確認,比較有效率
(畢竟全檔案checksum,load很大)
==========以下為轉錄==========
<?

$root = $_SERVER["argv"][1];

echo("Evaluate redundant files in directory '$root'\n");

// 1. get file list with size
// 2. sort file list by size
$fileList = getFileList($root);
echo("Get sorted file list.\n");
//print_r($fileList);

$ret = array ();
// 3. if there is any file the same size with a file, caculate the MD5 checksum
// 4. if their MD5 checksum are the same, output them
foreach ($fileList as $size => $nameArray) {
if (count($nameArray) >= 2) {
$tmp = array();
foreach ($nameArray as $name) {
$content = file_get_contents($name);
$tmp[md5($content)][] = $name;
}
foreach ($tmp as $md5 => $nameArray) {
if (count($nameArray) < 2) {
unset($tmp[$md5]);
}
}
if (!empty($tmp)) {
$ret = array_merge($ret, $tmp);
}
}
}

print_r($ret);

function getFileList($root) {
$ret = array ();
$list = scandir($root);
foreach ($list as $key => $value) {
if ("." == $value or ".." == $value) {
unset($list[$key]);
} elseif (is_dir("$root/$value")) {
$tmp = getFileList("$root/$value");
if (!empty($tmp)) {
foreach ($tmp as $size => $nameArray) {
if (is_array($ret[$size])) {
$ret[$size] = array_merge($ret[$size], $nameArray);
} else {
$ret[$size] = $nameArray;
}
}
}
} elseif (is_file("$root/$value")) {
$ret[filesize("$root/$value")][] = "$root/$value";
}
}

return $ret;
}
?>

bsdson.tw
可愛的小學生
可愛的小學生
 
文章: 67
註冊時間: 週一 4月 11, 2005 4:44 pm

文章bsdson.tw » 週二 3月 07, 2006 11:15 am

至於windows下的,我也不知道~
沒在用windows了...
你可以考慮在linux下面mount windows的磁區,然後...
或者你可以拿我的去修改一下,
放在windows下執行,
(但要在windows下裝php)
再次謝謝你喔~ :)
bsdson.tw
可愛的小學生
可愛的小學生
 
文章: 67
註冊時間: 週一 4月 11, 2005 4:44 pm


回到 debian misc

誰在線上

正在瀏覽這個版面的使用者:Google [Bot] 和 1 位訪客