Как подстановка команд работает с find? - PullRequest
1 голос
/ 16 мая 2011

У меня есть следующая команда

find . -name "*.tiff" -exec echo `basename -s .tiff {}` \;

Я ожидаю, что это напечатает все мои .tiff-файлы без их расширений.Я получаю

./file1.tiff
./file2.tiff
...

Команда

find . -name "*.tiff" -exec basename -s .tiff {} \;

дает

file1
file2
...

Разве это не должно быть вводомэхо?

Ответы [ 2 ]

5 голосов
/ 16 мая 2011

Содержимое обратных тиков выполняется перед командой поиска - с получением только заполнителя {}, который используется в командной строке поиска - отсюда и ваш результат. Вы всегда можете использовать set -x, чтобы проверить, что представляет собой оболочка.

1 голос
/ 16 мая 2011

Используйте символы одинарных кавычек (') вместо обратных кавычек (`) - помещение команды в обратные кавычки приводит к ее выполнению и замене ее выводом в вашей команде. Также измените команду, чтобы избавиться от echo, например:

find . -name "*.tiff" -exec 'basename -s .tiff {}' \;

Это выполнит basename для каждого найденного файла.

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