Для цикла с результатом командной оболочки

#linux #bash #shell #variables #script

Вопрос:

Я хочу посчитать строки во многих файлах и многих каталогах за последние семь дней,

Имя файла выглядит следующим образом :

 /home/me/DC1/server1.20211018_hours1.bz2
/home/me/DC1/server1.20211018_hours2.bz2
/home/me/DC1/server1.20211018_hours3.bz2

/home/me/DC2/server2.20211018_hours1.bz2
/home/me/DC2/server2.20211018_hours2.bz2
/home/me/DC2/server2.20211018_hours3.bz2
 

Таким образом, несколько файлов для одного сервера

Для того, чтобы посчитать одно имя файла, которое я сделал, работает нормально

 bzcat /home/me/DC1/server1/ | wc -l

 

Но мне нужно перебирать каждое имя сервера, поэтому я сделал команду для вывода каждого имени файла, чтобы поместить его в var с

 servername=$(find /home/me/2021/*/*server*20211015* -type f -printf "%fn" | cut -d. -f1 | sort -u)

 

И вот моя проблема, я хочу сделать цикл FOR, чтобы использовать свой var для подсчета каждой строки для каждого сервера за последние семь дней, и каждый раз, когда он входит в первый for, мне нужно использовать другое имя сервера в пути :p

Так что на данный момент я сделал :

 
servername=$(find /home/me/2021/*/*server*$dday* -type f -printf "%fn" | cut -d. -f1 | sort -u)


for file in $servername; do
    for i in {1..7}; do
        dday=$(date  %Y%m%d -d "$i days ago")
        messagefileone=0
        messagefiletwo=0
        messagefileone=$(bzcat /home/me/2021/*/*$servername*message1*"$dday"* | wc -l)
        messagefiletwo=$(bzcat /home/me/2021/*/*$servername*message2*"$dday"* | wc -l)
        total=$(($messagefileone $messagefiletwo))
        echo "Nom instance: "$messagefiletwo"
        echo "Day: $dday"
        echo "Message messagefileone: $messagefileone"
        echo "Message messagefiletwo: $messagefiletwo"
        echo "Total message: $total"
    done
done

 

Я не уверен, что мне все ясно, но я старался изо всех сил

Спасибо тебе !

Комментарии:

1. for file in "$servername".* ; do ? Проверьте свой сценарий с помощью shellcheck

2. См . раздел Использование поиска, в частности разделы Комплексные действия и Действия оптом . Запуск anything=$(find ...) -это антипаттерн; см. BashPitfalls #1 .