Как удалить все файлы в текущем каталоге, начинающиеся с точки?

Я думаю, что единственным подходящим инструментом для этой задачи по-прежнему является RegexBuddy в Windows. В Linux нет достаточного решения.

6
20.09.2016, 02:20
4 ответа

. * соответствует всем файлам, имена которых начинаются с . . Каждый каталог содержит файл с именем . , который относится к самому каталогу, и файл с именем .. , который относится к родительскому каталогу. . * включает эти файлы.

К счастью для вас, попытка удалить . или .. дает сбой, поэтому вы получаете безобидную ошибку.

В zsh . * не соответствует . или .. . В bash вы можете установить

GLOBIGNORE='.:..:*/.:*/..'

, и тогда * будет соответствовать всем файлам, включая файлы с точками, но исключая . и .. .

В качестве альтернативы можно использовать шаблон подстановки, который явно исключает . и .. :

rm -rf .[!.]* ..?*

или

rm -rf .[!.] .??*

В качестве альтернативы используйте find .

find . -mindepth 1 -delete
5
27.01.2020, 20:23

Вы можете игнорировать ошибку для своих целей.

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

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

Вы не можете удалить каталог, в котором находитесь, иначе где бы вы были? И вы не можете удалить свой родительский каталог, иначе будет текущая директория. Это не совсем так, вы можете удалить свой текущий каталог и родительский каталог, но инструменты (в данном случае rm) настроены так, чтобы сделать это немного сложнее, потому что это интуитивно понятно. .

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

Основываясь на информации в вашем вопросе, мой ответ: да, вы сделали что-то не так и да, вы могли нанести серьезный ущерб своей системе.

Прежде всего, вы выполнили эту команду с повышенными привилегиями. Вам НИКОГДА не следует делать что-либо рекурсивно с повышенными привилегиями, если вы еще не знаете результат. Вы, конечно, никогда не должны удалять НИЧЕГО с повышенными привилегиями, если вы точно не знаете, что делаете. В следующий раз используйте mv .Таким образом, если вы что-то испортили, вы можете просто вернуть это обратно.

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

1
27.01.2020, 20:23

Если вы хотите удалить все файлы с точками, по соглашению следует использовать следующую команду:

rm .??*

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

6
27.01.2020, 20:23
find /path/to/dir -type f -name ".*" -delete
4
27.01.2020, 20:23

Теги

Похожие вопросы