Удалить FTP папки из Linux

Вопрос или проблема

Я хотел бы удалить папку на моем FTP-сервере, хостинга PureFtpd, в скрипте, чтобы автоматизировать эту задачу. У меня есть bash-скрипт, который выглядит так:

#!/bin/sh

HOST=myhost.com
USER=my-user
PASSWORD=my-password

ftp -inv $HOST <<EOF
user $USER $PASSWORD
cd /folder_A
ls
rmdir -r assets
bye
EOF

Сервер дает следующий отзыв:

Connected to myhost.com.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-Вы пользователь номер 1 из 160 разрешенных.
220-Местное время сейчас #####. Порт сервера: 21.
220-Это частная система - анонимный вход запрещен.
220-IPv6 соединения также приветствуются на этом сервере.
220 Вы будете отключены после 5 минут бездействия.
331 Пользователь my-user ОК. Требуется пароль.
230-Ваше использование полосы пропускания ограничено.
230 ОК. Текущая ограниченная директория - /
Тип удаленной системы - UNIX.
Используется бинарный режим для передачи файлов.
250 ОК. Текущая директория - /folder_A
200 Команда PORT выполнена успешно.
150 Подключение к порту 49849.
drwxr-xr-x    3 3012       my-user          3 Окт  8 07:29 .
drwxr-xr-x   11 3012       my-user         16 Окт  7 22:49 ..
drwxr-xr-x    3 3012       my-user         13 Окт  7 22:46 assets
226-Опции: -a -l 
226 Всего 3 совпадения
550 Невозможно удалить директорию: Нет такого файла или директории.
221-До свидания. Вы загрузили 0 и скачали 0 килобайтов.
221 Выход.

Я понимаю, что папка “assets” не существует, но исследование в FileZilla показывает, что папка все еще присутствует.

Я пытался выполнить следующую команду без успеха:

rmdir -r /folder_A/assets

Многие поиски в Google не дали решения. Следующая идея – попробовать ChatGPT…

Ответ или решение

Для успешного удаления папки на FTP-сервере, работающем под управлением PureFTPd, необходимо учесть, что команда rmdir используется только для удаления пустых каталогов. Если каталог содержит файлы или другие папки, вам потребуется использовать другой подход.

Следующий Bash-скрипт показывает, как выполнить удаление папки с использованием FTP-клиента:

#!/bin/sh

HOST=myhost.com
USER=my-user
PASSWORD=my-password

ftp -inv $HOST <<EOF
user $USER $PASSWORD
cd /folder_A
ls
# Включаем соответствующую команду для удаление не пустых папок
# Прежде чем удалить папку, нужно сначала удалить все её содержимое
mdelete assets/*
# Теперь удаляем саму папку, если она пуста
rmdir assets
bye
EOF

Объяснение

  1. mdelete assets/: Команда mdelete используется для удаления всех файлов в папке assets. Если в папке есть подкаталоги, вам нужно будет повторить эту команду для каждого из них, вручную или с помощью рекурсивного подхода. Обратите внимание, что в некоторых FTP-клиентах может потребоваться подтверждение для удаления.

  2. rmdir assets: После того как папка будет пустой, используйте команду rmdir для её удаления.

Потенциальные проблемы и решения

  • Если у вас есть подкаталоги в папке assets, вам нужно будет удалить их так же.
  • Если ваш FTP-сервер не поддерживает mdelete, вам может потребоваться использовать другой инструмент (например, lftp) или сделать это через SFTP, если такой доступ возможен.
  • Если у вас установлены права доступа, убедитесь, что у пользователя есть полномочия на удаление файлов и папок.

Альтернативные подходы

Если вам нужно удалить папку с вложенными файлами и подкаталогами, рассмотрите возможность использования SFTP, который предлагает более мощные команды и функции для работы с файлами. Например, вот как это можно сделать с помощью lftp:

#!/bin/sh

HOST=myhost.com
USER=my-user
PASSWORD=my-password

lftp -u $USER,$PASSWORD $HOST <<EOF
rm -r /folder_A/assets
bye
EOF

С помощью lftp команда rm -r будет рекурсивно удалять папку, включая все файлы и подкаталоги.

Заключение

Удаление папки на FTP-сервере требует внимания к деталям, таким как наличие файлов и подкаталогов. Следуйте этому подходу, и вы сможете автоматизировать удаление папок с помощью Bash-скриптов. Удачи!

Оцените материал
Добавить комментарий

Капча загружается...