bash, логическая ошибка в цикле for подсчета строк в файлах

  • krdgroup 24.11.2022
    Написал скрипт подсчета строк в файлах. Сами файлы могут храниться в разных каталогах, но все в дочерних файла скрипта. В зависимости от текущей даты надо брать файлы из каталога с названием текущего месяца или предыдущего ( к примеру 2211 или 2210 ). Получается скрип не воспринимает файл как файл. Т.е. к примеру в скрипте ниже находит 2 пути к 2 файлам
    ./AXE/CNA5/LBN/2211:
    test3.txt
    ./AXE/TELLIN/2211:
    test4.txt
    и просто выводит на экран
    cat: './AXE/CNA5/LBN/2211:': No such file or directory
    0
    cat: test8.sh: No such file or directory
    0
    cat: './AXE/TELLIN/2211:': No such file or directory
    0
    cat: test8.sh: No such file or directory
    0
    А должен считать кол-во строк в файлах
    cat: './AXE/CNA5/LBN/2211:': No such file or directory
    0
    cat: test3.txt: No such file or directory
    0
    cat: './AXE/TELLIN/2211:': No such file or directory
    0
    cat: test4.txt: No such file or directory
    0
    Сам скрипт
    #!/bin/bash
    #заносим в переменную текущее число месяца
    timestamp=$(date +%d) 
    #если сейчас 1 число то присваиваем переменной предыдущий месяц, иначе текущий 
    if [[ $timestamp == 1 ]]; then
    	folder=$(date -d " - $(date +%d) days" +%y%m)
    else
    	folder=$(date +%y%m)
    fi
    #находим путь к файлам
    path=$(find ./ -type d -name "$folder")
    #находим файлы
    for file in  $(ls $path)
    do
    	echo $(cat $file | wc -l)
    done

    Что мне нужно исправить чтобы получить нужный результат?
  • VadimAndyVadimAndy 25.11.2022
    No such file or directory - не верен путь до файла
    >>и просто выводит на экран
    странно ждать от cat что-то другое....
  • krdgroup 25.11.2022
    А из-за чего может не во всех папках считать?
    #!/bin/bash
    #заносим в переменную текущее число месяца
    timestamp=$(date +%d) 
    #если сейчас 1 число то присваиваем переменной предыдущий месяц, иначе текущий 
    if [[ $timestamp == 01 ]]; then
    	folder=$(date -d " - $(date +%d) days" +%y%m)
    else
    	folder=$(date +%y%m)
    fi
    #находим путь к файлам
    path=$(find ./ -type d -name "$folder")
    #находим файлы и считааем кол-во записей
    for file in $path/*
    do
    	wc -l $file
    done
    выдает результат
    wc: ./AXE/CNA5/LBN/2211: Is a directory
    0 ./AXE/CNA5/LBN/2211
    16 ./AXE/TELLIN/2211/1.txt
    Хотя по пути ./AXE/CNA5/LBN/2211 тоже лежит файл 2.txt с двумя записями. Причем если в 3-ю директорию размещаю файл тоже только в одной считает.
  • VadimAndyVadimAndy 25.11.2022
    No such file or directory - нет такой папки или файла - потому и путь не верен, потому и в папках может несчитать в Linux - абстолютные пути начинаются с / . - скрытые файлы ./ - скрипты (для исполнения)
  • krdgroup 25.11.2022
    VadimAndy:
    No such file or directory - нет такой папки или файла - потому и путь не верен, потому и в папках может несчитать в Linux - абстолютные пути начинаются с / . - скрытые файлы ./ - скрипты (для исполнения)

    А что в скрипте поменять надо чтобы заработало? не совсем понимаю
  • VadimAndyVadimAndy 25.11.2022
    проверь пути и назначение прав/владельца на файл
    1.shabang
    2.расширение .sh на конце файла
    3.владелец root
    4.проверь пути указанные в файле
    5.понимая для чего нужен скрипт
    6.напиши адекватаную инструкцию в закомментированных строках
    7.внимательно проверь содержимое файла
    8.выдать права на исполнение chmod +x name_file
  • xKDE 25.11.2022
    На время отладки выведите значение Вашей переменной "path" и сверьте с ожидаемым