LINUX.ORG.RU

bash ftp sync

 ,


0

1

Привет гуру. Тема избитая,и я дико туплю, поэтому прошу помощи. Есть задача : с фтп брать файлы и обрабатывать. обработанные файлы удаляются и в следующий раз и скачивать уже не надо. Пока придумал только скрипт: формирует список файлов, потом из листинга удаляются совпадения и тянется wget. Кусок который удаляет

ls -la /delete/ | sed '1,3d' | awk '{print $9}' > .delfromlisting
while read LINE; do
        sed -i "0,/${LINE}/{//d;}" .listing
done < .delfromlisting
и он плохой так как файлов очень много (~20-30k) и работает все медленно. Как сделать правильно ?

Если не вру, то команда

ls -la 
будет тупить на папке в которой 20к файлов в любом случае это ext4 так работает.

Yur4eg ★★
()
$ cat delfiles.awk
#!/bin/awk -f

BEGIN { lst=1 }
NR>3 { if(NF!=0 && lst==1) { files[$9]=1; }
        else if(NF==0 && lst==1) { lst=0; }
        else if(NF!=0 && lst==0) { files[$0]=0; }
        }
END { for (i in files) if(files[i]==1) print i }
$ (ls-la; echo; cat .listing) | delfiles.awk
vodz ★★★★★
()

А нельзя просто смонтировать через fuse, обрабатывать и сразу удалять?

curlftpfs ftp://$USER:$PASSWD@$HOST/ temp-ftpfs
cd temp-ftpfs
обработать файл && rm файл
legolegs ★★★★★
()
Ответ на: комментарий от vodz

Вроде как работает, но не подходит, так как надо сохранить структуру начального файла, чтобы потом скормить его wget'у.

drwxrwxrwx   2 www-data www-data  6303744 Jul  2 04:01 .
drwxr-xr-x  11 root     root         4096 Feb 17  2016 ..
-rw-r--r--   1 root     root       949075 Jan 15 00:08 201712.tar.gz
-rw-r--r--   1 root     root       875240 Feb 15 00:06 201801.tar.gz
-rw-r--r--   1 root     root       830274 Mar 15 00:06 201802.tar.gz
После скрипта остаются только названия файлов (

anonymous
()

обработанные файлы удаляются

файлов очень много (~20-30k)

Это у вас все время там 30К файлов лежит или только первый запуск?

потом из листинга удаляются совпадения

Откуда они там возьмутся, у вас не может быть двух файлов с одинаковыми именами.

Как сделать правильно ?

Продумать нормальное хранилище. А так как минимум всю эту баш-портянку заменить на один вызов find.

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

Это у вас все время там 30К файлов лежит или только первый запуск?

На ФТП все время, удалять там нельзя. Локально все это не хочу хранить и удаляю после обработки формируя при это листинг удаленных. Чтобы их не тянуть сравниваю два листинга.

eduardoeres
() автор топика
Ответ на: комментарий от eduardoeres

Ну тогда вот так:

$ cat delfiles.awk

#!/bin/awk -f

BEGIN { lst=0 }
      {  if(NF==0) { lst=1 }
         else if(lst==0) { files[$9]=$0 }
         else { lst=lst+1; if(lst>4) delete files[$9] }
      }
END   { for (i in files) print files[i] > ".listing" }
$ (cat .listing; echo; ls -la;)  | delfiles.awk

(Порядок в вызове тоже поменялся!)

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от micronekodesu

Уже. Обработка файлов производится пользователями, скрипт кроном, ну и как следствие файлы все равно копятся.

eduardoeres
() автор топика
Ответ на: комментарий от eduardoeres

Не находит вхождений (а может и находит), но формирует файл с бОльшим кол-вом строк на 16.

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

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

Посмотрел побайтно, оказалось фтп поднят на вин и там строка кончается crlf. Поправил и все заработало. Спасибо всем за внимание.

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