搜查重複檔案並刪除的工具

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

版主: mufa

搜查重複檔案並刪除的工具

文章bsdson.tw » 週四 6月 22, 2006 3:51 pm

請問 linux 下有無此種工具
可以搜查兩個目錄,
列出重複的檔案,
刪除之..
(如果能針對 程式檔 作比對會更好)
bsdson.tw
可愛的小學生
可愛的小學生
 
文章: 67
註冊時間: 週一 4月 11, 2005 4:44 pm

文章hyl » 週四 6月 22, 2006 4:48 pm

代碼: 選擇全部
#/bin/python2.4

import os, sys
if __name__ == '__main__':
  set1 = set(os.listdir(sys.argv[1]))
  set2 = set(os.listdir(sys.argv[2]))
  print "\n".join(set1 and set2)
hyl
可愛的小學生
可愛的小學生
 
文章: 5
註冊時間: 週四 4月 08, 2004 5:49 pm

文章redjoe » 週四 6月 22, 2006 4:48 pm

gnome-commander
是個 File Manager (檔案管理)。有比對兩個目錄功能,類似 windows 下的 wincmd、
DOS 下的 Norton Commander、Linux command 下的 mc。

安裝
sudo aptitude install gnome-commander
redjoe
快樂的大學生
快樂的大學生
 
文章: 518
註冊時間: 週一 4月 07, 2003 10:15 pm
來自: Taiwan

文章bsdson.tw » 週五 6月 23, 2006 9:47 am

謝謝你們的回應,昨天因為等不及,自己也寫了一個 PHP 的 script,
給定兩個目錄,程式會 recursive 的比對下去,並印出『重複而可以刪除的檔案』,將輸出倒到檔案中,再用 sh 執行,則可以刪除不要的檔案。
代碼: 選擇全部
<?
$baseDir = realpath($_SERVER["argv"][1]);
$incDir = realpath($_SERVER["argv"][2]);

assert(is_dir($baseDir));
assert(is_dir($incDir));

rmDup($baseDir, $incDir);

function rmDup($baseDir, $incDir) {
  print("# scan $baseDir and $incDir\n");

  $baseFileList = scandir($baseDir);
  unset($baseFileList[array_search('.', $baseFileList)]);
  unset($baseFileList[array_search('..', $baseFileList)]);

  foreach ($baseFileList as $file) {
    print("# check $file...");

    if (false == file_exists("$incDir/$file")) {
      print(" inexistent\n");
      continue;

    } elseif (is_dir("$baseDir/$file") and is_dir("$incDir/$file")) {
      print(" directory-typed\n");
      rmDup("$baseDir/$file", "$incDir/$file");

    } elseif (is_file("$baseDir/$file") and is_file("$incDir/$file")) {
      if (filemtime("$baseDir/$file") == filemtime("$incDir/$file") and filesize("$baseDir/$file") == filesize("$incDir/$file") and file_get_contents("$baseDir/$file") == file_get_contents("$incDir/$file")) {
        print(" duplicated\n");
        print("/bin/rm -f $incDir/$file\n");
      } else {
        print(" different\n");
      }
    } else {
      print(" irregular\n");
      continue; // skip irregular files
    }
  }
  print("# finish scanning $baseDir and $incDir\n");
}
?>

希望可以對有需要的人有幫助喔!
bsdson.tw
可愛的小學生
可愛的小學生
 
文章: 67
註冊時間: 週一 4月 11, 2005 4:44 pm


回到 debian misc

誰在線上

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