bash, логическая ошибка в цикле for подсчета строк в файлах
-
Написал скрипт подсчета строк в файлах. Сами файлы могут храниться в разных каталогах, но все в дочерних файла скрипта. В зависимости от текущей даты надо брать файлы из каталога с названием текущего месяца или предыдущего ( к примеру 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
Что мне нужно исправить чтобы получить нужный результат? -
А из-за чего может не во всех папках считать?
выдает результат#!/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
Хотя по пути ./AXE/CNA5/LBN/2211 тоже лежит файл 2.txt с двумя записями. Причем если в 3-ю директорию размещаю файл тоже только в одной считает.wc: ./AXE/CNA5/LBN/2211: Is a directory 0 ./AXE/CNA5/LBN/2211 16 ./AXE/TELLIN/2211/1.txt
-
VadimAndy:No such file or directory - нет такой папки или файла - потому и путь не верен, потому и в папках может несчитать в Linux - абстолютные пути начинаются с / . - скрытые файлы ./ - скрипты (для исполнения)
А что в скрипте поменять надо чтобы заработало? не совсем понимаю -
проверь пути и назначение прав/владельца на файл
1.shabang
2.расширение .sh на конце файла
3.владелец root
4.проверь пути указанные в файле
5.понимая для чего нужен скрипт
6.напиши адекватаную инструкцию в закомментированных строках
7.внимательно проверь содержимое файла
8.выдать права на исполнение chmod +x name_file