Я пытался удалить файлы, заканчивающиеся на тильду, с помощью команды rm *.*~
, но это не удаляет файлы, которые начинаются с .
и заканчиваются на ~
, например .somefile~
. Я также пробовал rm *~
, но это тоже не работает для файлов, начинающихся с .
. Может кто-нибудь объяснить, почему так происходит?
Я хочу удалить все файлы, заканчивающиеся на ~
, независимо от того, начинаются ли они с a .
или нет (я пытался сделать это без find/exec). Это возможно?
решение1
Файлы, начинающиеся с a, .
по умолчанию скрыты и не отображаются в обычном ls
. Поскольку вы могли их не видеть, оболочки обычно не будут сопоставлять эти файлы, если вы не включите их вручную. Это можно сделать следующим образом:
rm *~ .*~
решение2
Хотя ответ выше, вероятно, безопаснее (из-за меньшего количества побочных эффектов), для полноты картины...
Оболочка bash (которую большинство людей запускают в Linux) имеет флаг, указывающий, включать ли dotfiles в globs или нет. Вы устанавливаете его с помощью shopt -s dotglob
. Последовательность ниже — до установки флага, затем после установки. Обратите внимание, что rm удалит его после установки dotglob.
$ touch .somefile~
$ rm *~
rm: cannot remove `*~': No such file or directory
$ ls -A
.somefile~
$ shopt -s dotglob
$ rm *~
$ ls -A
$
Немного менее безопасно; теоретически вы можете забыть, установлено это или нет. Но если вы хотите установить это везде и будете последовательны в этом, это может быть то, что вам нужно.