当不存在(1)或(2)的文件时,删除该文件

bel*_*ver 3 bash

我的照片库一团糟。由于一些副本,我的图像看起来像这样:

IMG_20220505_1701.jpg
IMG_20220505_1701 (1).jpg
IMG_20220505_1701 (2).jpg
Run Code Online (Sandbox Code Playgroud)

现在,我想删除其名字中包含 (1) 或 (2) 的每张照片,但仅限于不存在该文件的文件时。我怎样才能做到这一点?

ter*_*don 5

如果存在没有数字的文件,这将删除名称中带有括号的数字的所有文件:

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).pngsomefile (2).png但没有somefile.png,那么 和 都somefile (1).pngsomefile (2).png被保留。如果这可能是一个问题,运行上面的命令后,您可以使用以下命令重命名所有(1)文件perl-renamerename在 Ubuntu 和其他基于 Debian 的发行版上调用):

rename -- 's/ \(1\)//' *'(1)'*
Run Code Online (Sandbox Code Playgroud)

然后再次运行第一个命令以仅保留一个。(2)如果您还遇到只存在或文件的情况,您可能需要尝试一下(N)