apa*_*jja 3 command-line filenames rename
我正在从事图形设计。我已经从各种网站下载了许多文件(EPS
文件、PSD
文件等)。
因为它来自不同的网站,从10多个不同的网站下载后,我得到了许多相同大小的相同文件,但文件名不同(同一文件2至4份)。手动一一去除重复是很费时间的
我希望有一种方法可以将所有下载的文件重命名为不同文件的唯一名称(如果新名称不是描述性的,我不介意)。
例如,2个相同的文件:nice-sun.eps
从站点1678.eps
下载的文件,从站点2下载的文件。重命名后文件名相同。
此命令将所有文件重命名为其内容的 md5sum。这意味着具有相同内容的文件将获得相同的名称。
for f in *; do mv $f $(md5sum $f | cut -d " " -f 1); done
Run Code Online (Sandbox Code Playgroud)
您可以在命令中替换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
Run Code Online (Sandbox Code Playgroud)
您也可以在某些文件具有统一文件名而其他文件没有的目录中安全地运行此命令。
$ 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
Run Code Online (Sandbox Code Playgroud)
请注意,它仍然会计算已经散列的文件的散列。因此,如果文件很大,您可能希望防止重新散列。