查找并计算结果,如果小于x则删除

时间:2018-09-29 22:45:37

标签: bash find

我想在目录及其所有子目录中搜索结构如下的文件:ABC.001.XYZ,ABC.001.DEF,ABC.002.XYZ等。 它应搜索以ABC.001开头的所有文件,对结果计数,如果小于x,则删除以该开头的所有文件。然后转到ABC.002,依此类推。

dir = X
counter=1
while [ $counter -le 500 ]
do
if [find ${dir} -type f -name 'ABC*' | wc -l -eq 5]
then
for file in $(find ${dir} -type f -name 'ABC*')
do
  /bin/rm -i ${file}
fi
((counter++))
done

我的问题是

I。如何插入-name'ABC *'的变量计数器,使其递增。 (如字符串占位符)

II。如果计数器小于10或100,如何将其放置在计数器前面,所以我将00或0放置在它的前面,这样它实际上会搜索ABC001 *,而不是ABC1 *

1 个答案:

答案 0 :(得分:0)

您可以使用printf来打印格式化的数字,就像大多数语言一样:

printf "ABC%03d" "$counter"

简单替换可以将其放入find的参数中。还值得一提的是,find可以直接删除文件,只是个人喜好,但是for循环可能更整洁。

#!/bin/bash
dir=X
for counter in $(seq 1 500); do
    if [[ $(find "$dir" -type f -name "$(printf "ABC%03d" "$counter")" | wc -l) -eq 5 ]]; then
        find "$dir" -type f -name "$(printf "ABC%03d" "$counter")" -delete
    fi
done