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

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

 sudo rm directory/* 

дает ответ

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

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

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

 sudo ls directory/ 

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

  • Как автоматически ввести льготный период sudo при входе в CLI?
  • Как удаленно выполнять несколько команд на нескольких серверах?
  • sed и sudo с заменой строки
  • Запустить специальную команду из .desktop с корневым
  • Почему gksu запрашивает у меня пароль root, а не мой пароль?
  • Целевой каталог (/ etc) не доступен для записи текущим пользователем на недоступном
  • Ошибка при добавлении пользователя в группу колес в CentOS 7
  • Разрешено только одно имя файла
  • 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 - лучшая ОС в мире.