Как на Bash посчитать количество файлов на удаленном фтп?

Не могу написать скриптик на Bash илит Shell, который бы заходил на фтп и считал количество файлов на удаленном фтп в определенной директории и всех под директориях этой папки. С авторизацией понятно, не могу разобраться как сделать подсчет во всех поддиректориях.
  • Вопрос задан
  • 6071 просмотр
Пригласить эксперта
Ответы на вопрос 5
@zuborg
Не примите за занудство, но bash (и другие sh) не умеет заходить на ftp. Вам необходимо использовать внешнюю программу, которая это умеет, и тут начинаются зависимости от версии Вашей ОС, что установлено и что можно установить и т.д. и т.п. Уточните вопрос.

btw, если есть возможность логина по ssh вместо ftp, то вопрос решается легко через
find /path/to/dir -type f | wc -l
Всяко производительней делать подсчет на стороне где лежат эти файлы, вместо пересылки списка файлов. Кроме того, команда dir протокола ftp не делает рекурсивный листинг, так что таких команд придется прогнать столько, сколько найдется поддиректорий, это дополнительные тормоза.
Ответ написан
pesich
@pesich
Ftp протокол понимает ls -R, а вот с wc -l, облом выходит.
Посмотрите в help какие команды вам разрешенны.
Ответ написан
sledopit
@sledopit
{ ftp -inv SERVER << EOF
user USER PASSWORD
cd DIRECTORY
ls -R
bye
EOF
} | sed '/^[d-]/!d;s/^\(.\).*/\1/' | sort | uniq -c | sed 's/-/files/;s/d/directories/'
Ответ написан
pesich
@pesich
Вроде работает, подпилите под себя если что то не так.

#!/bin/bash

HOST=«IP»
USER=«xxxx»
#PASSWD=«1234»

CONTENT="$(ftp -nv <<EOF
open $HOST
user $USER
ls -R
bye
EOF)"

echo -n «Number of remote files on $HOST: „
echo “$CONTENT»|egrep -v «user|ls|^d|bye» | wc -l
Ответ написан
@tgz
Большинство ftp не позволяют исполнять рекурсивный ls.
А еще бывает там лежат файлики типа ls-lR.gz
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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