Задать вопрос

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

Не могу написать скриптик на Bash илит Shell, который бы заходил на фтп и считал количество файлов на удаленном фтп в определенной директории и всех под директориях этой папки. С авторизацией понятно, не могу разобраться как сделать подсчет во всех поддиректориях.
  • Вопрос задан
  • 6091 просмотр
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Linux для робототехников
    3 месяца
    Далее
  • Stepik
    Основы Linux
    2 недели
    Далее
  • Учебный центр IBS
    AL-1801 ОС Astra Linux Special Edition 1.8 для пользователей
    1 неделя
    Далее
Пригласить эксперта
Ответы на вопрос 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
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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