почему не работает sftp rmdir?

18

Я пытаюсь удалить каталог с большим количеством файлов и папок из личного пространства сервера. Я вхожу в систему через SFTP нормально; Я могу получить доступ ко всему каталогу без проблем; Я даже могу удалить отдельные файлы с помощью команды rm. Но это заняло бы у меня целую вечность - поэтому я действительно хотел бы просто выполнить rmdir для самой высокой папки, которую я хочу удалить. Но когда я делаю это, я получаю

Не удалось удалить каталог: сбой

Есть мысли о том, что я могу делать не так?

Большое спасибо, Сэм

user1451632
источник
Если вы можете использовать SFTP на этом сервере, можете ли вы использовать SSH? Если это так, вы можете использовать более мощную версию команды RM: rm -rf foo / *
Chris

Ответы:

21

По моему опыту, rmdir предпочитает работать с пустым каталогом. Если вы пытаетесь удалить каталог foo, я бы сделал:

$rm foo/*
$rmdir foo
Крис
источник
2
Отредактировано, потому что флаг -rf не существует для rm в sftp.
Крис
1
SSH 'сделать rm -rf был очевидным ответом. Я пробовал rm -rf на SFTP, но он не мог принять -rf, как вы указали. (Трюк с подстановочными символами в SFTP тоже не сработал.) В любом случае, большое спасибо за вашу помощь!
user1451632
Забавно. rm foo / * работал у меня в SFTP. В любом случае, я рад, что вы решили это!
Крис
Тем не менее, он не удаляет каталоги рекурсивно. Это уже достаточно хорошо, но еще не идеально :-)
Кшиштоф Яблонский
Была та же проблема и rm foo/*не работал, потому что foo/содержал непустые каталоги. К счастью, rsyncэто тоже было разрешено, и я создал пустой каталог локально, а затем использовал rsync -rv --delete empty_local_dir/ host.example.org:/foo/для удаления все, что находится под удаленным foo/каталогом. После этого стало возможным rmdir fooчерез SFTP.
ckujau
5

Вы не указали, каким SFTP-клиентом вы пользуетесь. Итак, я предполагаю, что OpenSSH SFTP ( sftp).

Команда rmdirв SFTP-клиенте OpenSSH сопоставляется напрямую с SSH_FXP_RMDIRзапросом протокола SFTP. Спецификация SFTP для версии 3 (используемой OpenSSH), в частности, упоминает, что SSH_FXP_RMDIRоперация может завершиться неудачей, «если указанный каталог не пустой» (хотя, похоже, он этого не требует).

Если в каталоге нет подкаталогов, вы можете использовать rm foo/*(то есть команду OpenSSH SFTP, а не команду оболочки), чтобы сначала удалить все файлы в каталоге. А потом пользуйся rmdir.

Мартин Прикрыл
источник
1
Классический вопрос: как вы делаете rm -r *с SFTP. Я не думаю, что это возможно.
Яри ​​Туркиа,
2
@JariTurkia Это невозможно с sftp(клиент командной строки OpenSSH). Это возможно с SFTP (протокол), если у вас достаточно умный клиент.
Мартин Прикрыл,
Буду признателен за любые предложения по достаточно умному SFTP-клиенту. Есть один конкретный блок, который мне нужно регулярно повозить и ограниченный SFTP по соображениям безопасности. Очевидно, что при выполнении чего-либо это становится очень болезненным, учитывая ограниченный набор команд, предлагаемых SFTP-клиентом OpenSSH.
Яри ​​Туркиа,
Задайте вопрос о вашей конкретной проблеме ( «Как рекурсивно удалить папку с использованием SFTP» ) - Убедитесь, что вы указали свою платформу.
Мартин Прикрыл