Как удалить файл с именем * (звездочка) без использования кавычек? - PullRequest
0 голосов
/ 20 мая 2019

Я реализовал следующую команду для создания файла с именем * (звездочка):

 echo > '*'

Теперь я должен удалить этот файл без цитирования.

Я знаю, как удалить это с помощью цитат, но не знаю, как без использования цитат.

Я попробовал следующие команды, которые были уверены, что они не будут работать из-за расширения командной строки:

rm ./*
rm /*

Если кто-то может мне помочь с этим, я был бы очень признателен.

Ответы [ 3 ]

2 голосов
/ 20 мая 2019

Я думаю, вы должны решить это самостоятельно: -)

Самое простое решение, не связанное с цитированием, - это использовать шаблон [*].Выражения в скобках в оболочке работают так же, как классы символов в регулярных выражениях, так что они будут соответствовать файлу с именем, состоящим из одного символа *.Таким образом, вы можете удалить свой файл с помощью

rm [*]

Обратите внимание, что вы не можете использовать этот шаблон для создания файла с именем *, поскольку оболочка заменяет слова, содержащие шаблоны, на имя (имена).) файлов , соответствующих шаблону ;если такого файла не существует, то шаблон не сопоставляется и подстановка не выполняется.Так что если нет файла с именем *, то touch [*] создаст файл с именем [*].

1 голос
/ 20 мая 2019

Вы можете использовать расширение истории . Если команда rm следует непосредственно за командой echo, вы можете использовать !$:

echo > '*'
rm !$

!$ - сокращение от !!:$: повтор последнего слова ($) последней команды (!!).

Если есть команды между echo и rm, вы можете найти номер истории, используя fc -l:

$ echo > '*'
$ cmd1
$ cmd2
$ cmd3
$ fc -l
[...]
27628    echo > '*'
27629    cmd1
27630    cmd2
27631    cmd3
$ rm !27628:$

!27628 расширяется до команды с таким номером в истории, и $ снова является последним словом этой команды.

Если вам нужно запустить это в скрипте, вы не сможете найти номер команды и вставить ее, но вы можете посчитать количество команд между echo и rm и использовать относительное событие. обозначение:

echo > '*'
cmd1
rm !-2:$

где !-2 относится к команде на две строки назад. Обратите внимание, что расширение истории по умолчанию отключено в неинтерактивных оболочках; использовать

shopt -o history

чтобы включить его.

0 голосов
/ 20 мая 2019

Вы можете использовать rm -i *, если количество файлов не слишком велико. Это будет запрашивать подтверждение для каждого файла. Подтвердите удаление только для файла * и отклоните его для всех остальных.

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