Почему удаление каталога занимает так много времени по SFTP?

Одна из моих установок WordPress была недавно перенесена, и я пытаюсь удалить каталог старой, но удаление заняло более 15 минут. Похоже, он удаляет каждый отдельный файл. Это нормально? Может ли он просто удалить папку и запустить ее в фоновом режиме? Для сравнения, на Mac (Unix) это занимает полсекунды.

3 ответа

Решение

Может ли он просто удалить папку и запустить ее в фоновом режиме? Для сравнения, на Mac (Unix) это занимает полсекунды.

Это не только проблема SFTP, но и нелокальная (ака: сетевая) проблема файловой системы. Когда вы находитесь на своем Mac или любой другой ОС; просто непосредственно в системе - у вас есть прямой доступ к вашей файловой системе. А поскольку файловая система действительно упрощает ее, но для ясности, это просто небольшая база данных / индекс с указателями расположения файлов / каталогов. Итак, что происходит, когда вы удаляете файл или каталог локально, так это то, что файл базы данных / индекса локальной файловой системы обрабатывается довольно быстро, поскольку он, конечно, локальный.

Напротив, при удаленном доступе к файловой системе через сетевой протокол, такой как SFTP, у вас нет прямого доступа к файловой системе. Поэтому, если вам нужно удалить каждый файл / каталог через сетевое соединение, сначала сетевое соединение должно получить список файлов / каталогов из удаленной файловой системы. И когда программа получает этот список, она запускает удаленное действие для удаления файла. Этот метод довольно неэффективен, и поэтому всегда предпочтительнее иметь прямой доступ к файловой системе.

Тем не менее, если у вас есть учетная запись SFTP, у вас также должен быть доступ по SSH, поскольку SFTP-соединение обычно просто управляется как подсистема SSH. Так что если вы сходите с ума в ожидании файлов / каталогов, удалите просто войдите через SSH и запустите rm -rf команда для файлов / каталогов, о которых идет речь.

Обычно, если у вас есть доступ по sftp, у вас также есть доступ по ssh, и вы можете выполнять удаленные команды, используя это. Таким образом, чтобы рекурсивно удалить структуру каталогов, вы должны использовать параметр -r для команды rm. т.е.

ssh user@hostname.com "rm -rf /home/user/directory" 

Будьте очень осторожны с этой командой и убедитесь, что каталог, который вы удаляете, на 100% является правильным. Вы также можете перечислить содержимое каталога, чтобы быть уверенным, делая это.

ssh user@hostname.com "ls /home/user/directory" 

Безопасный протокол передачи файлов не обеспечивает прямой доступ к API операционной системы.

Это в значительной степени означает нет.

Удаление через SSH может быть быстрее, если у вас есть доступ к оболочке.

Другие вопросы по тегам