同じファイルの名前を同じ名前に変更して重複エントリを削除します。

同じファイルの名前を同じ名前に変更して重複エントリを削除します。

私はグラフィックデザインの分野で働いています。さまざまなウェブサイトから多くのファイル(EPS文書、PSDファイルなど)をダウンロードしました。

さまざまなWebサイトで提供されているため、10を超えるWebサイトからダウンロードした後、同じサイズの同じファイルがたくさん作成され、すべてが同じですが、ファイル名が異なります(同じファイルのコピー2〜4個)。重複を排除するために手動で1つずつ開くには非常に時間がかかります

ダウンロードしたすべてのファイルの名前を別のファイルの一意の名前に変更する方法があることを願っています(新しい名前が説明的でなくても大丈夫です)。

たとえば、2つの同じファイル(nice-sun.epsサイト1からダウンロードしたファイルと678.epsサイト2からダウンロードしたファイル)です。名前を変更すると、ファイル名は同じになります。

ベストアンサー1

このコマンドは、すべてのファイルの名前をその内容の md5sum に変更します。つまり、同じ内容のファイルは同じ名前を持ちます。

for f in *; do mv $f $(md5sum $f | cut -d " " -f 1); done

コマンドからに置き換えることができますmd5sumsha1sum

このデモでは、名前の変更を確認できるように-vいくつかの項目を追加しました。mv

$ echo 1 > a
$ echo 2 > b
$ echo 1 > c
$ ls -1
a
b
c
$ for f in *; do mv -v $f $(md5sum $f | cut -d " " -f 1); done
`a' -> `b026324c6904b2a9cb4b88d6d61c81d1'
`b' -> `26ab0db90d72e28ad0ba1e22ee510510'
`c' -> `b026324c6904b2a9cb4b88d6d61c81d1'
$ ls -1
26ab0db90d72e28ad0ba1e22ee510510
b026324c6904b2a9cb4b88d6d61c81d1

一部のファイルには同じファイル名があり、他のファイルにはないディレクトリからこのコマンドを安全に実行することもできます。

$ echo 1 > d
$ echo 2 > e
$ ls -1
26ab0db90d72e28ad0ba1e22ee510510
b026324c6904b2a9cb4b88d6d61c81d1
d
e
$ for f in *; do mv -v $f $(md5sum $f | cut -d " " -f 1); done
mv: `26ab0db90d72e28ad0ba1e22ee510510' and `26ab0db90d72e28ad0ba1e22ee510510' are the same file
mv: `b026324c6904b2a9cb4b88d6d61c81d1' and `b026324c6904b2a9cb4b88d6d61c81d1' are the same file
`d' -> `b026324c6904b2a9cb4b88d6d61c81d1'
`e' -> `26ab0db90d72e28ad0ba1e22ee510510'
$ ls -1
26ab0db90d72e28ad0ba1e22ee510510
b026324c6904b2a9cb4b88d6d61c81d1

まだハッシュされたファイルのハッシュを計算します。そのため、ファイルが大きい場合は、災害を防ぐことをお勧めします。

おすすめ記事