如何删除所有不是单个文件的Linux目录?

时间:2016-03-17 19:06:30

标签: linux bash rm

我在Linux机器上的目录中有重复的文件,列出如下:

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

我想删除所有不单身的文件,因此我应该拥有:

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

4 个答案:

答案 0 :(得分:1)

这是一种方法

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

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

答案 1 :(得分:1)

该函数使用 \ textglob ,因此在执行之前,设置 \ textglob shopt -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

答案 2 :(得分:0)

您可以使用:

numArray[0] = doubleIt(a);
numArray[1] = doubleIt(b);

<pre> out.println("<html><body>"); out.println("<h1>My HTML Body</h1>"); out.println("</html></body>"); </pre> while read -r f; do rm "$f"* done < <(printf "%s\n" * | cut -d. -f1 | uniq -d) printf用于获取当前目录中的重复条目(位于点之前)。

答案 3 :(得分:-3)

命令

 rm *.*

如果我理解正确的话,应该这样做吗

使用ls确认第一个