ファイル名の最初の数文字に基づいて重複ファイルを検索する

ファイル名の最初の数文字に基づいて重複ファイルを検索する

私はLinuxシェル(好ましくはbash)でファイル名の最初の数文字に基づいてファイルの重複を見つける方法を探しています。

これが便利な場合:

Minecraft用モードパックを製作しています。 1.14.4 以降、Forge はパッケージに冗長モードがあってもエラーは発生しません。最も古いバージョンの実行が停止します。これらの重複項目を見つけるのに役立つスクリプトは非常に便利です。

リストの例:

minecolonies-0.13.312-beta-universal.jar   
minecolonies-0.13.386-alpha-universal.jar 

詐欺を受けた人を迅速に特定することで、顧客基盤をより小さく保つことができます。

リクエストに応じて追加情報を提供

特定の形式はありません。しかし、ご覧のとおり、少なくとも2つの一般的な形式があります。さらに、コミュニティにはどのキャラクターを使用するか、使用しないかについての標準はありません。一部は空白(より嫌がらせ)を使用し、一部は[](さらに嫌がらせ)を使用し、一部は_(より嫌がらせ)を使用し、一部は-(優先されますが何ができるか)を使用します。

https://gist.github.com/be3cc9a77150194476b2000cb8ee16e5サンプルモードファイル名のリストです。きれいに掃除されており、破れたものは一つもありません。

https://gist.github.com/b0ac1e03145e893e880da45cf08ebd7a私が意図的にコピーしたサンプルが含まれています。これは時々起こる誇張された仕事です。

より詳細な説明

私はこれがリソース集約的かもしれないことを知っています。

サンプリングするすべてのファイル名の先頭から最後まで、スライス範囲をランダムに指定したいと思います。そのフラグメントに基づいて重複項目を検索し、重複項目を強調表示します。実際に削除するスクリプトは必要ありません。

追加クレジット

スクリプトは、簡単に削除したり名前を変更したりできるように、コピー基準を満たすと疑われるファイルのメニューを表示します。

ベストアンサー1

冗長性のフィルタリング

一部のスクリプトを使用して、重複する可能性のあるファイルをフィルタリングできます。名前の最初のダッシュ、アンダースコア、またはスペースの前にある1つ以上の他のファイルと一致するすべてのファイル(大文字と小文字を区別しない)を新しいディレクトリに移動できます。cdjarsディレクトリに移動して実行します。

#!/bin/bash
mkdir -p possible_dups

awk -F'[-_ ]' '
    NR==FNR {seen[tolower($1)]++; next}
    seen[tolower($1)] > 1
' <(printf "%s\n" *.jar) <(printf "%s\n" *.jar) |\
    xargs -r -d'\n' mv -t possible_dups/ --

注:可能な重複エントリが見つからないときにファイル引数なしで一度実行されるのを-r防ぐためのGNU拡張です。mvまた、GNU 引数は-d'\n'ファイル名を改行で区切ります。つまり、上記のコマンドでは、スペースやその他の一般文字は処理されますが、改行は処理されません。

フィールド区切り文字の割り当てを編集して、文字を追加または削除して-F'[-_ ]'繰り返しをテストするセクションの終わりを定義できます。今は「突進、解く、または空白」を意味します。一般的に言えば、ここで行ったように、繰り返しのケースについて実際よりも多くのデータをキャプチャすることをお勧めします。

これで、これらのファイルを確認できます。ファイル数がそれほど多くないと思われる場合は、フィルタリングなしですべてのファイルに対して次の手順を実行することもできます。


冗長性に関する目視検査

これにはビジュアルシェルを使用することをお勧めしますmc真夜中司令官mcLinuxディストリビューションのパッケージ管理ツールを使用して簡単にインストールできます。

mcこれらのファイルを含むディレクトリを呼び出すか、そのディレクトリに移動できます。 X端末を使用するとマウスもサポートされますが、すべての操作に便利なショートカットがあります。

たとえば、メニューには、目的のソートされたLeft -> Sorting... -> untick "case sensitive"ビューが表示されます。

矢印を使用してファイルを参照して複数のファイルを選択し、強調表示された選択Insert項目をコピー(F5)、移動(F6)、または削除(F8)できます。以下は、フィルタリングされたテストデータのスクリーンショットです。

ここに画像の説明を入力してください。

おすすめ記事