我想在目录及其所有子目录中搜索结构如下的文件: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 *
答案 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