linux удаление временных файлов

linux удаление временных файлов

Я пытался удалить файлы, заканчивающиеся на тильду, с помощью команды 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
$

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

Связанный контент