2015-07-16 2 views
0

Эти файлы содержат время unix как часть их имени. эти файлы, как показано ниже:файл списка, соответствующий временному диапазону с использованием отметки времени unix

1.1437039767.xml 1.1437039614.xml и т.д ..

Вот моя функция баш; Я пытаюсь перечислить только файлы, имена которых находятся между Сегодня и завтра в unix time.

list() { 

D=$(date "+%m/%d/%Y 00:00:00") 
d=$(date -d "${D}" +%s) 
CURRENT=$(date "+%m/%d/%Y %H:%M:%S") 
u=$(date -d "${CURRENT}" +%s) 

LS=$(ls -1A "${1}"* | sed -e "s/1.//" -e "s/.xml$//") 

for file in ${LS}; 
do 
if [ "${file}" -gt "${d}" -a "${file}" -lt "${u}" ]; 
then 
echo "1.${file}.xml" 
fi 
done 
} 

list ${1} 

Эта функция дает такие ошибки

[: 16-07-15/1437025363: integer expression expected 

Любая помощь :)

Добавление выход с -x

Вот моя команда, включая $ {1}:

./test.sh /path/ 

+ '[' path/1437043449 -gt 1437001200 -a path/1437043449 -lt 1437057123 ']' 
./test.sh: line 17: [: path/1437043449: integer expression expected 

T Приветствую вас. Al.

+0

Добавить 'set -x' в начало вашей функции, чтобы вы могли видеть, что происходит. – meuh

ответ

1

Ваша проблема заключается в том, что вы уезжаете имя каталога в цифрах попытаться сравнить, например, path/1437043449 -gt 1437001200 при следует сравнивать просто 1437043449 -gt 1437001200.

Я отредактировал ваш сценарий, чтобы использовать expr вместо sed, чтобы извлечь только часть номера из полного имени пути (часть внутри \(...\)).

list() { 
    D=$(date "+%m/%d/%Y 00:00:00") 
    d=$(date -d "${D}" +%s) 
    u=$(date +%s) 

    for file in $(ls -1A "${1}"*) 
    do if number=$(expr "$file" : '.*\.\([0-9]*\)\.xml$') 
     then if [ "$number" -ge "${d}" -a "$number" -le "${u}" ] 
      then echo "$file" 
      fi 
     fi 
    done 
} 
list ${1} 
Смежные вопросы