Как вы рекурсивно удаляете все скрытые файлы в каталоге в UNIX? - PullRequest
25 голосов
/ 21 февраля 2011

Я долго искал, но, похоже, не могу найти краткого решения.У меня есть Mac с папкой, которую я хочу очистить от всех скрытых файлов / каталогов - ничего скрытого.Раньше это было рабочее пространство Eclipse с большим количеством материалов .metadata / .svn, и я в порядке, когда все это было удалено.Как я могу это сделать (с помощью сценария оболочки, Applescript и т. Д.).Заранее большое спасибо!

Ответы [ 6 ]

48 голосов
/ 21 февраля 2011

find . -name ".*" -print

Я не знаю MAC OS, но именно так вы их найдете в большинстве * nix сред.

find . -name ".*" -exec rm -rf {} \;

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

Первый "." означает из вашего текущего каталога.Также обратите внимание, что второе ".*" может быть изменено на ".svn*" или любое другое более конкретное имя;приведенный выше синтаксис просто находит все скрытые файлы, но вы можете быть более избирательным.Я использую это все время, чтобы удалить все каталоги .svn в старом коде.

12 голосов
/ 21 февраля 2011

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

Это должно включать только файлы и каталоги, которые начинаются с точки и исключают . и ...

find . -mindepth 1 -name '.*' -delete
3 голосов
/ 20 июня 2013
rm -rf `find . -type f -regex '.*/\.+.+'`

Если вы хотите удалить каталоги, измените -type f на type -d.

Если вы хотите удалить файлы и каталоги, удалите type -f

1 голос
/ 21 февраля 2011
find /path -iname ".*" -type f -delete ;

рубин (1,9 +)

ruby -rfileutils -e 'Dir["**/.*"].each{|x| FileUtils.rm(x) if File.file?(x)}'
0 голосов
/ 26 июля 2014

Я нашел, что это работает довольно хорошо (по крайней мере, в Bash на Linux):

find . -wholename '*/.*' -type f | sed -n '/\/\.[^\/]\+$/p' | xargs rm

Вы можете настроить регулярное выражение в вызове sed по своему вкусу.

Будьте осторожны: в моем случае у меня есть много скрытых файлов с именем .gitignore или .gitkeep, которые должны быть сохранены. Обязательно проверьте список, чтобы увидеть, есть ли там что-нибудь, что вы хотите сохранить.

Я нашел этот вариант весьма полезным, он удаляет такие файлы, как ._ANYTHING (часто удаляются или файлы tmp):

find . -wholename '*/.*' -type f | sed -n '/\/\._[^\/]\+$/p' | xargs rm
0 голосов
/ 20 января 2012

Я использую эту команду для удаления пустых каталогов.Он начинается снизу и идет к вершине.Таким образом, он не будет ошибаться, если вы ссылаетесь на текущий путь.

find . -depth -type d -empty -exec rmdir {} \;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...