删除具有唯一基名的文件?

时间:2015-08-08 16:39:22

标签: linux bash shell command

我的文件夹中包含

等文件
a.JPG
a.GIF
b.JPG
c.JPG
c.GIF
d.GIF

文件b.JPGd.GIF在其文件名的basename部分只出现过一次,因此我想删除b.JPGd.GIF,如何删除的bash?

2 个答案:

答案 0 :(得分:1)

这是一个合理的程序:

1.-未加引号的*将列出所有文件:循环遍历它们。

2.-可以使用${myfile%.*}

删除尾随扩展名

3.-使用星号name.*展开名称(点以确保名称的结尾)。

4.-并将结果捕获到数组中:" tocount =(...)"

5.-最后,如果数组计数为1,则删除该文件。

代码:

for myfile in *; do
    tocount=( "${myfile%.*}".* )
    [[ ${#tocount[@]} -eq 1 ]] && rm "$myfile"
done

答案 1 :(得分:0)

在bash版本4中使用关联数组

declare -A count
# count each root-name
for f in *; do
    (( count["${f%.*}"] ++ ))
done
# delete the files with count 1
for key in "${!count[@]}"; do
    if (( ${count["$key"]} == 1 )); then
        rm "$key"*
    fi
done