Как вывести имя отсутствующих файлов в папке?

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

Кто-то здесь задал тот же вопрос и получил по существу тот же ответ: Рекомендуемые обратные приложения брандмауэра для Linux?

8
30.07.2015, 01:41
4 ответа

Вариант решения @chaos (bash 4.0 или выше или zsh 4.3.11 и выше):

for a in GL.....2003{001..365}.{00..18..6}00.001.2015210044609.pss.grb 
do  
  [[ -f $a ]] || echo "$a"
done

или

for a in {001..365}.{00..18..6}
do
  [[ -f "GL.....2003${a}00.001.2015210044609.pss.grb" ]] || echo "$a"
done

для печати только отсутствующих день + час

7
27.01.2020, 20:08

Хотя ответ хаоса удобен для использования в интерактивных оболочках, его можно использовать как сценарий POSIX, например, если вы нужно делать это периодически и / или делать это на других компьютерах.

#!/bin/sh
i=0
while test "$((i+=1))" -lt 366 ; do
    for j in 00 06 12 18 ; do
        file="GLDAS_NOAH025SUBP_3H.A2003$(printf '%03d' "$i").${j}00.001.2015210044609.pss.grb"
        test -e "$file" || echo "$file"
    done
done

( seq или расширение скобок не указаны в POSIX.)

4
27.01.2020, 20:08

С zsh или bash4 , вы можете использовать фигурные скобки для этого:

ls -d GLDAS_NOAH025SUBP_3H.A2003{001..006}.{0000,0600,1200,1800}.001.2015210044609.pss.grb >/dev/null

Обратите внимание на скобки:

  • {001..006} означает расширение до 001 , 002 , ... 006
  • {0000, 0600,1200,1800} к каждому из вышеперечисленных добавьте 0000 , 0600 , 1200 и 1800 .
  • > / dev / null предназначен для того, чтобы избежать стандартного вывода ls -> нам нужна только стандартная ошибка

Теперь, если один файл отсутствует, ls покажет ошибку:

ls: cannot access GLDAS_NOAH025SUBP_3H.A2003004.0000.001.2015210044609.pss.grb: No such file or directory
ls: cannot access GLDAS_NOAH025SUBP_3H.A2003004.0600.001.2015210044609.pss.grb: No such file or directory
ls: cannot access GLDAS_NOAH025SUBP_3H.A2003004.1200.001.2015210044609.pss.grb: No such file or directory
ls: cannot access GLDAS_NOAH025SUBP_3H.A2003004.1800.001.2015210044609.pss.grb: No such file or directory
ls: cannot access GLDAS_NOAH025SUBP_3H.A2003005.0000.001.2015210044609.pss.grb: No such file or directory
ls: cannot access GLDAS_NOAH025SUBP_3H.A2003005.0600.001.2015210044609.pss.grb: No such file or directory
ls: cannot access GLDAS_NOAH025SUBP_3H.A2003005.1200.001.2015210044609.pss.grb: No such file or directory
ls: cannot access GLDAS_NOAH025SUBP_3H.A2003005.1800.001.2015210044609.pss.grb: No such file or directory
ls: cannot access GLDAS_NOAH025SUBP_3H.A2003006.0000.001.2015210044609.pss.grb: No such file or directory
ls: cannot access GLDAS_NOAH025SUBP_3H.A2003006.0600.001.2015210044609.pss.grb: No such file or directory
ls: cannot access GLDAS_NOAH025SUBP_3H.A2003006.1200.001.2015210044609.pss.grb: No such file or directory
ls: cannot access GLDAS_NOAH025SUBP_3H.A2003006.1800.001.2015210044609.pss.grb: No such file or directory

Для ksh93 замените {001..006} на {1..6% .3d} .

13
27.01.2020, 20:08

Создайте имена файлов в цикле, а затем проверьте отсутствие файла:

for day in `seq -f "%03g" 1 30`
  do
  for hour in 0000 0600 1200 1800
    do
    filename="GLDAS_NOAH025SUBP_3H.A2003${day}.${hour}.001.2015210044609.pss.grb"
    if [[ ! -e $filename ]]
    then
      echo "File missing: $filename"
    fi
  done
done

Примечание: я не гарантирую, что этот пример будет безошибочным. Это пример, а не заведомо работающий скрипт.

Переносимость: требуется ksh , bash или zsh и система с доступной командой GNU seq .

2
27.01.2020, 20:08

Теги

Похожие вопросы