在Windows下,有不少工具可以幫助使用者找出『重複的檔案』
甚至是兩張相同的照片,但是不同檔名,
請問在Linux下有類似的工具嗎?
或是可以怎麼用各種工具搭配使用以達相同的功能?
謝謝喔!
在moto有搜尋過,但似乎沒有相關的資料~
版主: mufa
<?
$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;
}
?>
正在瀏覽這個版面的使用者:Google [Bot] 和 1 位訪客