2つの映画ライブラリをマージし、bashスクリプトを介して手動で「重複排除」したいと思います。
これまでの私の思考プロセスは次のとおりです。
- 拡張子に関係なく、同じ名前のファイルをすべて検索
- より小さなファイルを削除する(私は数日分のストレージスペースがあり、品質を好む!)
その上に積み重ねることができるので、削除された部分を何とか分離できれば、その上に積み重ねることができます。 ffmpegを使ってビデオを調べて、より良いものを選択することもできますが、大きいサイズ=最高のオプションであり、エンコードする方が簡単だと思います。
Software Recをリリースしましたしかし、私が望むものを手に入れなかったので、bashが最良の選択であることに気づきましたが、私の「検索」知識は限られており、私が見つけた回答のほとんどは複雑で、これが単純な問題であるべきだと思いました。
答え1
以下は、重複ファイルだけを探して拡張子を無視する私が書いた良い方法です。
find . -exec bash -c 'basename "$0" ".${0##*.}"' {} \; | sort | uniq --repeated
次に、このループにラップして、各ファイル内の2つのファイルのうち小さい方を見つけます。
for i in $(find . -exec bash -c 'basename "$0" ".${0##*.}"' {} \; | sort | uniq --repeated); do find . -name "$i*" -printf '%s %p\n' | sort -n | head -1 | cut -d ' ' -f 2-; done
最後に、もう1つのループを実行して(対話式でrm -i
各ループの前にプロンプトが表示されます)、次のファイルをすべて削除します。
for j in $(for i in $(find . -exec bash -c 'basename "$0" ".${0##*.}"' {} \; | sort | uniq --repeated); do find . -name "$i*" -printf '%s %p\n' | sort -n | head -1 | cut -d ' ' -f 2-; done); do rm -i "$j"; done
find
これには、ディレクトリに対して2つのことを行うことが含まれるため、より良い方法が必要です。しかし、これは単純な場合には機能します。また、現在ディレクトリで作業しているとします。別のディレクトリでコマンドを実行するには、.
両方find
のコマンドのパラメータを変更するだけです。
答え2
.srtファイルの問題を解決する必要があるため、これを実行した方法は次のとおりです。
名前は同じですが、拡張子が異なるファイルを探します。
ls * | sed 's/.\{4\}$//' | sort | uniq -d
注:拡張子が4文字かどうかによって異なります。たとえば、.XYZ
mpegでは動作しませんが、私の映画はすべてmp4 / mkv / m4vです。
.srt ファイルを無視:
ls * | awk '!/.srt/' | sed 's/.\{4\}$//' | sort | uniq -d
私はファイルサイズを比較する別のスレッドを投稿しましたが、Harry's Answerは軽減する必要がある.srtの問題があることを除いて素晴らしい仕事をしました。