Как удалить каталоги, к которым у меня нет прав доступа в Rust? - PullRequest
0 голосов
/ 11 ноября 2018

Как рекурсивно удалить каталог в Rust, удалив также пустые каталоги с разрешениями Unix 000? Эти разрешения читаются как «никакие пользователи не могут читать, писать или выполнять».

Ранее я уже создавал каталог:

mkdir -p dir/trap
chmod 000 dir/trap

Я пробовал этот метод:

std::fs::remove_dir_all("dir").unwrap();

Сбой «Разрешение запрещено». Существуют ли другие решения, которые по-прежнему удаляют такой каталог, например, rm -rf?

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Простой ответ пока не найден, поэтому я написал свою собственную реализацию: https://crates.io/crates/rm_rf

Использование:

rm_rf::force_remove_all("target", true).expect("Failed to remove file/directory");

Это удалит файлы только для чтения в Windows и пустые каталоги, не имеющие доступа для чтения в Linux.

0 голосов
/ 11 ноября 2018

Проблема в том, что remove_dir_all() сначала просматривает содержимое каталога, чтобы удалить любой файл или подкаталог, которые могут там быть. И у вас нет прав на чтение каталога, поэтому ошибка.

Вы можете позвонить вместо:

std::fs::remove_dir("dir").unwrap();

Он не пытается пройти по каталогу, а предполагает, что он уже пуст, и завершается ошибкой, если это не так.

Если вы хотите удалить непустой, 000 модемированный каталог, вам нужно сначала изменить разрешения на разумное значение, а затем безопасно вызвать remove_dir_all().

...