web-dev-qa-db-ja.com

重複する音楽トラックを見つけて削除するにはどうすればよいですか?

私の問題は、何らかの理由でいくつかの音楽トラックが重複していることです。ただし、それらは同じ名前ではありません。例えば:

音楽/ごみ73 /一語消火器/ 07。 Detchibe.mp3

Music/Prefuse 73/One Word Extinguisher/07-Detchibe.mp3

重複した曲ですが、07 **と07 -はファイルに基づいて検索する重複ファイルファインダをだましています名前。

8

やや単純なコマンドチェーンを見つけました。 @Oliに感謝します。

fdupes -rf --quiet ~/Desktop/Dupes2/ | while read i; do mv "$i" ~/Desktop/Dupes/ ; done

これは、fdupesを使用して、最初の(-r)を省略して、重複を検索(-f)します。 Bashはreadを介してこの行を1行ずつ読み取ります。AMDは各行をmvに渡し、すべての重複を別のディレクトリに移動します。 whileループで引用符を使用して、fdupesが処理しないスペースやその他の危険な句読点を処理することに注意してください(-1/--samelineでも)。

2

質問の答えのようにfdupesを使用できます "重複ファイルを見つけて削除する方法" 推奨。例を挙げましょう:

mkdir -p "Music/Prefuse 73/One Word Extinguisher/"
dd if=/dev/urandom of=Music/Prefuse\ 73/One\ Word\ Extinguisher/07.Detchibe.mp3 bs=1023 count=2048
  2048+0 records in
  2048+0 records out
  2095104 bytes (2.1 MB) copied, 0.379806 s, 5.5 MB/s
cp Music/Prefuse\ 73/One\ Word\ Extinguisher/07.Detchibe.mp3 Music/Prefuse\ 73/One\ Word\ Extinguisher/"07 - Detchibe.mp3"
fdupes -rd .
  [1] ./Music/Prefuse 73/One Word Extinguisher/07.Detchibe.mp3
  [2] ./Music/Prefuse 73/One Word Extinguisher/07 - Detchibe.mp3

  Set 1 of 1, preserve files [1 - 2, all]:

最初に、例のようにディレクトリを作成しました。ランダムデータからファイルを作成し、その内容を別のファイルにコピーしました。 fdupes -rdを実行すると、ソフトウェアは2つの正確なファイルを見つけ、どちらを削除するかを尋ねます。

たくさんのファイルがある場合は、-1オプションを使用できます。 fdupesは、すべての重複を1行に出力します。 xargsおよびその他のシェル機能を使用して処理できます。

2
qbi

Bansheeでトラックリッスンカウントを手動で設定しますか? の回答では、bansheeがすべてのトラック情報を保存するために使用するデータベースにアクセスする方法を説明しています。

データベースに接続したら、クエリ実行テーブルに貼り付けます

select tweaked_track, count(*) from 
  (select replace(replace(replace(title, ' ', ''), '-', ''), '.', '') as tweaked_track 
   from coretracks) 
group by tweaked_track 
order by 2, 1 desc;

[SQL文字列]ボックスに入力して、[クエリの実行]をクリックします。これにより、スペース、ダッシュ、およびピリオドを無視して、同じタイトルのすべてのトラックが表示されます。無視したい他の文字がある場合は、同じパターンでそれらをクエリに追加します。 (つまり、最初の既存の「置換」の前と最後の「)」の後にreplace(を追加し、, '[character you want removed]', '')を追加します。

(SQLについてどれだけ知っているかわかりません。詳細が必要な場合は、コメントを投稿してください。)

これにより、タイトルのリストが表示されます。実際に自分で削除する必要があります。

これを行うより良い方法があるかもしれませんが、もしあれば、私はそれについて知りません。

削除するファイルの大きなリストを作成したら(私のメソッドまたは他の人が述べたfdupesから)、削除するファイルのリストをテキストディレクトリに配置します。次のいずれかに該当することを確認してください。

オプション#1:ファイル名にはフルパスが含まれます。たとえば、ファイルには次のものが含まれます。

/home/doneill/music/weird_al/duped_file.mp3
/home/doneill/music/weird_al/another_dupe.mp3
/home/doneill/music/bach/baroque_dupe.mp3

オプション#2:ファイル名には相対パスが含まれ、ファイル名のリストを含むファイルは親フォルダーに保存されます。たとえば、ファイルリストが/home/doneill/music/に保存されている場合、次の内容が含まれます。

weird_al/duped_file.mp3
weird_al/another_dupe.mp3
bach/baroque_dupe.mp3

いずれの場合でも、ターミナルウィンドウを開き、リストcd /home/doneill/music/などのファイルを含むフォルダーに変更します。

入力する:

for a in `cat filelist.txt`; do echo $a; done

(filelist.txtをリストのあるファイルの名前に置き換えます)。これにより、削除するすべてのファイルのリストが吐き出されます。リストを再確認してください。正しい場合は、次を入力します。

for a in `cat filelist.txt`; do rm $a; done

これは基本的にコンピューターに伝えます。ファイルfilelist.txtの各行について、リストされている名前のファイルを削除します。

1
David Oneill