如何删除所有非单个文件 Linux 目录?

How to remove all not single files Linux directory?

我在 Linux 机器上的目录中有重复的文件,它们是这样列出的:

ltulikowski@lukasz-pc:~$ ls -1
abcd
abcd.1
abcd.2
abdc
abdc.1
acbd

我想删除所有文件 不是单个文件,因此我应该:

ltulikowski@lukasz-pc:~$ ls -1
acbd

命令

 rm *.*

如果我理解正确的话应该可以解决问题

先用ls确认

这是一种方法

for f in *.[0-9]; do rm ${f%.*}*; done

可能会出现异常,因为某些文件将被删除多次(在您的示例中为 abcd)。如果版本总是以 .1 开头,您可以限制匹配。

您可以使用:

while read -r f; do
   rm "$f"*
done < <(printf "%s\n" * | cut -d. -f1 | uniq -d)

printfcutuniq 用于获取当前目录中的重复条目(点之前的部分)。

函数使用extglob,所以在执行前,设置extglobshopt -s extglob

rm_if_dup_exist(){ 
    arr=()
    for file in *.+([0-9]);do
        base=${file%.*};
        if [[ -e $base ]]; then
            arr+=("$base" "$file")
        fi
    done
    rm -f -- "${arr[@]}"
}

这也将支持 . 之后有几个数字的文件名,例如abcd.250也可以.


您输入的用法示例:

$ touch abcd abcd.1 abcd.2 abdc abdc.1 acbd
$ rm_if_dup_exist
$ ls
  acbd

请注意,如果abcd.1存在但abcd不存在,则不会删除abcd.1.