чому sftp rmdir не працює?


18

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

Не вдалося видалити каталог: Помилка

Будь-які думки щодо того, що я можу зробити неправильно?

Дуже дякую, Сем


Якщо ви можете SFTP на цей сервер, можете SSH? Якщо так, ви можете використовувати більш потужну версію команди RM: rm -rf foo / *
Chris

Відповіді:


21

На мій досвід, rmdir вважає за краще працювати в порожньому каталозі. Якщо ви намагаєтесь видалити каталог foo, я б зробив:

$rm foo/*
$rmdir foo

2
Відредаговано тому, що прапор -rf не існує для rm у sftp.
Кріс

1
SSH'ing робити 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в OpenSSH SFTP-клієнті відображається безпосередньо на 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 з міркувань безпеки. Очевидно, що робити щось стає дуже боляче, враховуючи обмежений набір команд SFSS-клієнт OpenSSH.
Ярі Туркія

Задайте питання щодо вашої конкретної проблеми ( "Як рекурсивно видалити папку за допомогою SFTP" ) - Обов'язково вкажіть свою платформу.
Мартін Прикрил
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.