LINUX.ORG.RU

Скрипт проверки существует ли файл по шаблону

 ,


1

1

Доброго времени суток господа.Помогите пожалуйста,я или дико туплю...или не знаю,проблема заключается в том,что я пишу скрипт который бы проверял наличие файлов и если добавляется новые файлы то он заносит себе в базу(файлик) новые записи и уже проверяет новый список файлов.Но так как название файла меняется с датой,и разные файлы имеют разное разшернение (.csv.gz , .dbf.gz) у меня не выходит сделать проверку по шаблону на создания файла. Вот скрипт:

fname=`cat $dff_path/1|cut -d / -f 4-5`
for path_tmp in $fname
do
echo $path_tmp
  if [[ -f $mon_path$path_tmp$date* ]]; then
    OK=1
  fi
  if [ $OK -ne 1 ];then
    echo "CRITICAL - file not found in $mon_path$path_tmp$date.*"
#    exit 2
else
echo "OK=$OK"
  fi

Описание:

В1й строке мы заносим список файлов в переменную,пример: statistic_geo/bp_cpc_tao_ , statistic_ukr/contract_ukr_ В переменной $mon_path место расположения каталога с файлами,проблема заключается в том что бы подставлять правильное разрешение,или как сделать поиск по шаблону,но в строке if [[ -f $mon_path$path_tmp$date* ]]; then я ставил в конце * и ???,не помогает,я в на данном этапе в тупике.



Последнее исправление: jraver (всего исправлений: 1)

ls, find

а вообще, я ничего не понял

lazyklimm ★★★★★
()

проверял наличие файлов и если добавляется новые файлы

incron ?

uspen ★★★★★
()

Вроде как и в баше не дурак, привык к регуляркам, но ваш текст вы сделали по индусски не читаемым, и я, даже искренне хотя помочь, не смог распарсить и вычленить проблему.

Spirit_of_Stallman ★★★
()

Как я понял, задача заключается в определении, есть ли файлы с заданным началом имени.

Допустим A=«statistic_geo/bp_cpc_tao_» и нужно определеить, если ли файлы ${A}*, например: statistic_geo/bp_cpc_tao_1, statistic_geo/bp_cpc_tao_2, statistic_geo/bp_cpc_tao_AnyTEXT .

Если вы используете [[ , то это не будет поиск по шаблону, точнее не по шаблону в имени файла. Либо исползуйте find, либо используйте pathname expansion:

A=«statistic_geo/bp_cpc_tao_» ; [ «`echo $A*`» = «$A»'*' ] && echo No files

Но в этом случае нужно прочитать про опцию баша nullglob.

P.S. ИМХО таким темам место в разделе Development

mky ★★★★★
()
Ответ на: комментарий от mky

Всем спасибо сам разобрался,делал на основе примера с Nagios(проверка на наличие файла),и оказывается вся проблема была в 2х [[

if [[ -f $mon_path$path_tmp$date* ]]; then
в примере работало,а у меня не хотело,когда привел к такому виду все прекрасно заработало
  if [ -f $mon_path$path_tmp*.* ]; then
убил пол дня...а все так просто,спасибо всем

jraver
() автор топика

Без инициализации OK после этого

if [ $OK -ne 1 ]

должен вылетать, если первый файл не найден. Если инициализация до цикла (судя по отсутствующему #!...) - после первого срабатывания будет срабатывать всегда.

vahtu
()
Ответ на: комментарий от jraver

Зря вы всё таки не читаете man'ы. Во превых запись «*.*» выглядит дико, здесь не dos. А во вторых, похоже вы не поняли, что написали. В вашем выражении, «$mon_path$path_tmp» заменяется на значении соотв. переменных, далее к этим значением добавляется строка «*.*» и производится pathname expansion, ищутся все файлы, подходящие под шаблон и из этих имён формируется строка. Причём если файлов несколько, то строка будет состоять из нескольких имён файлов.

А условие "-f" требует наличия только одного аргумента. И когда окажется, что под шаблон подходит несколько имён файлов, это ваш if вылетит с ошибкой:

bash: [: too many arguments

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.