У меня есть репертуар с именем data
с несколькими файлами с разными типами разрешений.
Некоторые из них вообще не имеют разрешений, например ----------
.
Я хочу удалять файлы на основе их разрешений. Мне нужно только удалить файлы без разрешений в этой папке и больше ничего. Есть ли одна командная строка, которая поможет мне в этом?
Я пробовал chmod -R 777 data
, но это только перезаписывает все разрешения для этого репертория.
В вашем каталоге data
вы можете найти список этих файлов и легко удалить их.
Это вернет список файлов, соответствующих схеме разрешений «нет доступа» для файла:
find . -type f -perm 000
(В переводе на понятные термины команда «найти» выполняет поиск в текущем каталоге, в котором вы находитесь .
для файлов (тип -f
), для которых ваш пользователь, выполняющий поиск, не имеет разрешений)
Добавление -exec rm {} \;
в конец может удалить файлы. Однако убедитесь, что файлы, которые вы найдете с помощью первой команды без добавленного аргумента exec
, не содержат список файлов, которые необходимо сохранить (например, данные отслеживания репозитория git).
find . -type f -perm 000 -exec rm -f {} \;
... но будьте осторожны, используя рекурсивное удаление, подобное этому, потому что вы можете удалить то, что вам нужно, и это НЕ будет предлагать вам удалить каждый файл — это Я просто сделаю это.
Обратите внимание: если ваш пользователь не является владельцем файлов, вы не сможете удалить файлы, поэтому это будет работать, только если ваш пользователь действительно является владельцем этих файлов.