私はグラフィックデザインの分野で働いています。さまざまなウェブサイトから多くのファイル(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
コマンドからに置き換えることができますmd5sum
。sha1sum
このデモでは、名前の変更を確認できるように-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
まだハッシュされたファイルのハッシュを計算します。そのため、ファイルが大きい場合は、災害を防ぐことをお勧めします。