我的照片库一团糟。由于一些副本,我的图像看起来像这样:
IMG_20220505_1701.jpg
IMG_20220505_1701 (1).jpg
IMG_20220505_1701 (2).jpg
Run Code Online (Sandbox Code Playgroud)
现在,我想删除其名字中包含 (1) 或 (2) 的每张照片,但仅限于不存在该文件的文件时。我怎样才能做到这一点?
如果存在没有数字的文件,这将删除名称中带有括号的数字的所有文件:
for file in *'('* ; do
origFile=$(sed 's/ *([0-9]*)//' <<<"$file")
[ -e "$origFile" ] && [ "$file" != "$origFile" ] && rm -- "$file"
done
Run Code Online (Sandbox Code Playgroud)
请注意,如果不存在没有数字的文件,这将保留所有数字文件。因此,例如,如果您有somefile (1).png和somefile (2).png但没有somefile.png,那么 和 都somefile (1).png将somefile (2).png被保留。如果这可能是一个问题,运行上面的命令后,您可以使用以下命令重命名所有(1)文件perl-rename(rename在 Ubuntu 和其他基于 Debian 的发行版上调用):
rename -- 's/ \(1\)//' *'(1)'*
Run Code Online (Sandbox Code Playgroud)
然后再次运行第一个命令以仅保留一个。(2)如果您还遇到只存在或文件的情况,您可能需要尝试一下(N)。