如何删除所有非单个文件 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)
printf
、cut
和 uniq
用于获取当前目录中的重复条目(点之前的部分)。
函数使用extglob,所以在执行前,设置extglob: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.
我在 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)
printf
、cut
和 uniq
用于获取当前目录中的重复条目(点之前的部分)。
函数使用extglob,所以在执行前,设置extglob: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.