我的文件夹中包含
等文件a.JPG
a.GIF
b.JPG
c.JPG
c.GIF
d.GIF
文件b.JPG
和d.GIF
在其文件名的basename部分只出现过一次,因此我想删除b.JPG
和d.GIF
,如何删除的bash?
答案 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