重複ファイルを見つけるためのツールを見つけました。これで、重複ファイルを削除する準備が整いました。出力ファイルのフォーマットを少し見つめて、このスクリプトを思いついた。
#!/usr/bin/env ruby
contents = File.open('fdupes-result', 'rb') { |f| f.read }
duplicates = contents.split("\n\n")
duplicates.each do |set|
list = set.split("\n").reverse
list.drop(1).each do |filename|
# print "rm #{filename}"
%x[ rm #{filename} ]
end
end
コメントprint
されたステートメントは、私が物事を非破壊的にテストするために使用したものであり、それはうまく機能しているように見えました。しかし、%x
コマンドを追加すると、取得が開始されました
sh: 1: Syntax error: "(" unexpected
ファイルに次のような名前があることに気付くまで、何が起こっているのかわかりませんでした。/media/LilGalactus/music/Robert Johnson - Complete Recordings/Robert Johnson - The Complete Recordings (Disc2of2)[EAC-FLAC](oan)/s.gif
つまり、データにエスケープされていないスペースや角かっこなどがたくさんあります。約30秒間、のようなvimコマンドを使用して文字をエスケープすることを検討しまし:s/\(/\\\(/g
たが、その方法の制限はかなり明白だと思います。何か案は?