1

Я пытался удалить файлы, заканчивающиеся тильдой, используя команду rm *.*~ , Но это не удаляет файлы, начинающиеся с . и заканчивается ~ , например .somefile~ . Я также попробовал rm *~ , но это также не работает для файлов, начинающихся с . , Может кто-нибудь объяснить, почему это так?

Я хочу удалить все файлы, заканчивающиеся на ~ , независимо от того, начинаются ли они с . или нет (я пытался сделать это без поиска /exec). Это возможно?

2 ответа2

5

Файлы, начинающиеся с . по умолчанию скрыты и не отображаются в обычном ls . Поскольку вы, возможно, их не видели, оболочки обычно не будут соответствовать этим файлам, если вы не включите их вручную. Вы можете сделать это следующим образом:

rm *~ .*~
1

Хотя приведенный выше ответ, вероятно, безопаснее (из-за меньшего количества побочных эффектов), для полноты ....

Оболочка bash (это то, что большинство людей используют в Linux) имеет флаг, чтобы указать, следует ли включать точечные файлы в глобусы. Вы устанавливаете это с 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
$

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .