2

В bash, если попытаться запустить функцию basename в параметре -exec команды find , похоже, она ничего не сделает. В качестве примера:

find . -name "*pdf" -exec  echo $(basename {}) \;

возвращает имя файла, включая каталог, т. е. такой же, как результат

find . -name "*pdf" -exec  echo {} \;

Почему это происходит?

1 ответ1

3

Фрагмент $(basename {}) анализируется вашей оболочкой перед выполнением find . Результат {} . Вот почему две команды одинаковы.

Чтобы заставить его работать так, как вы хотели, вы можете создать другую оболочку, которая будет обрабатывать $() самостоятельно. Заключение в кавычки '' предотвращает обработку внешней оболочки $():

find -name "*pdf" -exec sh -c 'echo $(basename {})' \;

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