Как искать файлы заканчивались звездами? - PullRequest
0 голосов
/ 18 декабря 2018

Я хочу сделать скрипт, который ищет, показывает и удаляет имена, оканчивающиеся на "*".Моя команда:

echo rm `find -name "*[*]"`

Команда работает, но я создаю файл: что-то и что-то (законченная звезда) Теперь, после команды записи, он показывает мне: rm что-то (законченная звезда) и аналогичный файл "что-то" Почему?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Ошибка в том, что вы не цитируете аргумент echo.Вот тривиальное исправление:

echo "rm $(find -name "*[*]")"

Это не совсем минимальное исправление, потому что я также заменил устаревший синтаксис `backtick` на современный, рекомендуемый синтаксис $(command substitution).

Без кавычекстрока, возвращаемая из подстановки команд, обрабатывается оболочкой для разделения токенов и подстановочных знаков.Подробнее см. Когда обернуть кавычки вокруг переменной оболочки?

0 голосов
/ 18 декабря 2018

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

Сделайте это вместо:

find . -name "*[*]" -exec echo rm {} +

Вывод:

rm ./something*

Вы также можете достичь того жес выражением "*\*" в find.

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