Найти и посчитать результаты, удалить, если оно меньше х - PullRequest
0 голосов
/ 30 сентября 2018

Я хотел бы найти в каталоге и во всех его подкаталогах файлы, которые имеют такую ​​структуру: 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 голосов
/ 30 сентября 2018

Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...