Как использовать sudo для удаления содержимого каталога

У меня есть законная потребность в очистке каталога, к которому у моей учетной записи нет доступа (это каталог кеша, используемый приложением, и принадлежит учетной записи, которая запускает приложение.) У моей учетной записи есть полные права sudo (я думаю) , но я не могу понять, как удалить содержимое данного каталога. Моя учетная запись не может cd в каталог, только в родительский каталог.

 sudo rm directory/* 

дает ответ

 cannot remove `directory/*': no such file or directory 

Это похоже на проблему, которая должна иметь простой ответ, но я не могу ее найти.

Изменить: этот каталог определенно не пуст:

 sudo ls directory/ 

возвращает более 1000 имен файлов.

  • Можете ли вы указать iptables как пользователя без полномочий root и почему?
  • Linux (RedHat) `sudo su -l << user_acct >>` не является исходным профилем
  • sudo: «эффективный uid не равен 0, sudo установлен setuid root?» на малине Pi
  • Как я могу имитировать `sudo su - user` в скрипте?
  • Как разрешить аутентификацию с помощью `sudo` с помощью альтернативного пароля?
  • Как разрешить traceroute запускаться с правами root на ubuntu
  • отчет о разрешении судопроизводства
  • Установка программного обеспечения с установщиком пакета GUI с использованием разрешения sudo
  • 2 Solutions collect form web for “Как использовать sudo для удаления содержимого каталога”

    У вас проблемы, потому что ваша оболочка пытается расширить * в список файлов, но это невозможно, поскольку у вас нет прав на чтение каталога.

    Я могу думать о двух вещах, которые будут работать

     sudo bash -c "rm directory/*" 

    В этом случае * не расшифровывается вами, а root, который может читать каталог

    ИЛИ

     sudo find directory -type f -exec rm {} \; 

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

    Изменить: в первом варианте я случайно записал каталог. * Вместо каталога / *

    Каждый раз, когда вы собираетесь делать вещи, вы должны серьезно подумать о том, что делаете, если не используете явные пути.

    sudo rm /explicit/path/to/directory/* должен работать. Вы все равно получите эту ошибку, если в directory нет файлов; вы можете подавить это с помощью rm -f ( не rm -fr если вы абсолютно не уверены в том, что делаете).

    Linux и Unix - лучшая ОС в мире.