Что делает команда bash "rm * ~"? - PullRequest
7 голосов
/ 01 января 2011

Команда bash rm *~ просто удаляет файлы, оканчивающиеся на тильду, или здесь есть более продвинутый шаблон bash или gnu make?Похоже, Google не может найти эту комбинацию из двух символов.Я нашел это в Makefile clean: target.

Будет ли GNU когда-либо создавать файлы с конечными символами ~, используя только неявные правила?

Ответы [ 5 ]

7 голосов
/ 01 января 2011

Символ ~ (тильда) имеет специальное значение в пути в двух случаях:

~user        # the home directory of user
~/folder     # folder inside your home directory

По большей части, все. Команда, на которую вы ссылаетесь, делает именно то, как выглядит: удаляет файлы, имена которых заканчиваются тильдой. Текстовые редакторы, такие как emacs, сохраняют резервные копии файлов под именами файлов, оканчивающимися на тильды.

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

4 голосов
/ 01 января 2011

Как вы уже догадались, rm *~ просто удаляет файл с именами, заканчивающимися тильдой (~). Имена файлов, заканчивающиеся тильдой, обычно являются файлами резервных копий, созданными редакторами (в частности, emacs был одним из более ранних редакторов, использовавших это соглашение). После редактирования исходного кода обычно остается несколько таких файлов. Вот почему цель clean в Makefile удаляет их.

Является ли *~ каким-то специальным шаблоном bash, не относится к большинству make-файлов, так как / bin / sh используется по умолчанию для выполнения рецептов make. Только если SHELL установлен в make-файле, будет использоваться другая оболочка.

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

2 голосов
/ 01 января 2011

Нет, только то, что вы сказали. Удаляет файлы, заканчивающиеся на ~.

Редактировать -> единственное специальное значение, которое может иметь символ ~, - это сокращение для домашнего каталога текущего пользователя (как $HOME), но только в начале пути.

1 голос
/ 01 января 2011

Да для обоих


На самом деле обе ваши возможности в некоторой степени верны.

С ~ не связан подстановочный знак или специальный синтаксис имени файла, если только это не происходит вначало слова.

Но шаблон имени файла, заканчивающийся тильдой , равен , автоматически генерируемому программами mv(1) и cp(1) в большинстве дистрибутивов linux 1 , если-b (резервная копия) * Указана опция и целевой файл существует.Правило make в такой системе может содержать команду mv -b ... или cp -b ....


1.Но не на Mac или BSD.

1 голос
/ 01 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...