Я анализирую вывод SFTP 'ls -l' через awk, чтобы распечатать результаты только для существующих каталогов (да, я знаю, что Python лучше, а синтаксический анализ ls не очень хорошая идея, технические ограничения задачи).Вот вывод, который я получаю:
bash-3.2$ sftp my-server < batch_ls.sftp | gawk 'BEGIN{d=-1;wd=1}/^sftp> c/{d++;wd=0}/Coul/{wd=1}wd==0{print $0,d,wd}'
Connecting to my-server...
sftp> cd /ik/sftp_source/alpha 0 0
sftp> ls -l 0 0
drwxr-xr-x 2 65740 102 4096 Mar 21 05:15 . 0 0
drwxr-xr-x 4 65740 102 4096 Mar 21 04:21 .. 0 0
-rw-r--r-- 1 65740 102 35 Mar 21 05:15 0452984832A8.234 0 0
-rw-r--r-- 1 65740 102 34 Mar 21 05:15 0989855744A8.234 0 0
-rw-r--r-- 1 65740 102 35 Mar 21 05:15 1258291200A8.234 0 0
-rw-r--r-- 1 65740 102 34 Mar 21 05:15 1862270976A8.234 0 0
sftp> cd /ik/sftp_source/belta 1 0
Couldn't canonicalise: No such file or directory
sftp> ls -l 1 0
drwxr-xr-x 2 65740 102 4096 Mar 21 05:15 . 1 0
drwxr-xr-x 4 65740 102 4096 Mar 21 04:21 .. 1 0
-rw-r--r-- 1 65740 102 35 Mar 21 05:15 0452984832A8.234 1 0
-rw-r--r-- 1 65740 102 34 Mar 21 05:15 0989855744A8.234 1 0
-rw-r--r-- 1 65740 102 35 Mar 21 05:15 1258291200A8.234 1 0
-rw-r--r-- 1 65740 102 34 Mar 21 05:15 1862270976A8.234 1 0
sftp> cd /ik/sftp_source/delta 2 0
sftp> ls -l 2 0
drwxr-xr-x 2 65740 102 4096 Mar 21 05:15 . 2 0
drwxr-xr-x 4 65740 102 4096 Mar 21 04:21 .. 2 0
-rw-r--r-- 1 65740 102 34 Mar 21 05:15 0335544320A8.234 2 0
-rw-r--r-- 1 65740 102 35 Mar 21 05:15 0419430400A8.234 2 0
-rw-r--r-- 1 65740 102 35 Mar 21 05:15 1073741824A8.234 2 0
-rw-r--r-- 1 65740 102 34 Mar 21 05:15 1392508928A8.234 2 0
Здесь:
d - счетчик каталогов
wd - это флаг, чтобы узнать, обрабатываем ли мы вывод правильного каталога, или нам не удалось «cd» перейти к следующему, а мы все еще в предыдущем.
Похоже, что он не улавливает часть строки "Не удалось".Может ли кто-нибудь помочь мне найти лучшее решение и объяснить, почему это происходит?Большое спасибо!
PS Обратите внимание, что строка "Не удалось канонизировать ..." не имеет значений d и wd в конце.