FTP: получить последний файл в разделе

Это действительно боль в заднице. У меня запущен ftp-сервер, и он нерегулярно создает последний файл. Файл хранится как:

Home -> T22:30:10 -> new.txt , и последняя из них будет (новая папка)

Home -> T23:10:25 -> new.txt (обратите внимание, что это новая папка с самым последним временем)

Мне нужно что-то реализовать (это может быть что угодно, C-код, скрипт bash и т. Д.) На машине Linux, которая вытащит последний файл.

Я рассмотрю два варианта:

Вариант 1. Используйте libcurl, перейдите к списку каталогов и выберите последний файл. Это действительно боль в заднице и много времени, и я до сих пор не могу найти простой способ сделать это.

Вариант 2. Используйте lftp, при инициализации удалите все файлы на сервере, так что каждый раз, когда я вызываю lftp для загрузки чего-то, он будет последним. (Этот метод – это только идеализация, и я не пробовал в реальной жизни).

Есть ли более простой вариант?

2 Solutions collect form web for “FTP: получить последний файл в разделе”

Подход, который часто удобен, – это монтировать файлы, а затем обращаться к ним так же, как к обычным локальным файлам. Для сервера, к которому вы обращаетесь через FTP, вы можете использовать CurlFtpFS .

 mkdir theserver curlftpfs theserver.example.com theserver 

Вам необходимо передать имя пользователя и пароль curlftpfs либо в командной строке (что небезопасно, так как другие пользователи на вашем компьютере смогут их увидеть) или в файле ~/.netrc (настоятельно рекомендуется). Вот пример строки netrc:

 machine theserver.example.com login remoteusername password swordfish 

Теперь, когда вы установили FTP-сервер в качестве каталога на вашем компьютере, вы можете использовать обычные команды, такие как ls , cp и т. Д. Например, чтобы скопировать файл из каталога, который приходит последним в лексикографическом порядке (должно быть хорошо если имена файлов фактически содержат дату до времени):

 set -- theserver/remote/path/T* eval "last=\${$#}" cp -p -- "$last/new.txt" "/some/where/local/${last##*/}.txt" 

Или скопировать последний файл, считая, что используемые имена файлов не содержат непечатаемые символы или символы новой строки:

 cd theserver/remote/path last=$(ls -t -- T*/new.txt | head -n 1) cp -p -- "$last" "/some/where/local/${last%/*}.txt" 

Если вы в порядке с периодическим запуском сценария, вы можете использовать wget -N , см.

https://superuser.com/questions/283481/how-do-i-properly-set-wget-to-download-only-new-files


Вы можете создать такой скрипт, как:

 cd /var/download_here/ wget -N ftp://example.com/new.txt --ftp-user="my_user" --ftp-password="my_password" 

И добавьте запись crontab например:

 */5 * * * * /path/to_script 

Пожалуйста, обратите внимание, как создается исходный файл. Если что-то пишет, и файл не заблокирован – вы можете закончить загрузку неполного файла.

  • Внешние двойные мониторы Ubuntu создают проблему
  • Как сделать screencap другим дисплеем Xorg?
  • Как получить стабильный международный Дворжак с мертвыми ключами первого уровня в Debian?
  • import: невозможно открыть X-сервер `@ ошибка / import.c / ImportImageCommand / 361
  • X-сервер, блокировка клавиатуры и мыши с поврежденным дисплеем
  • Как скопировать текст из vim во внешнюю программу?
  • XServer: как проверить, кто / что использует отображение: N
  • Как средства командной строки в командной строке, такие как «xclip» и «xsel», сохраняются в буфере обмена - в среде X-Window это не так?
  • Высокое использование GPU перед запуском X-Server
  • Зачем нужны драйверы как для x-сервера, так и для ядра Linux?
  • Почему система X Window использует сервер?
  • Linux и Unix - лучшая ОС в мире.