find {} возвращает полное имя файла, но я просто хочу имя файла без расширения, поэтому index.md вернет индекс вместо index.md

Так что я

find . -name \*.md -type f -exec pandoc --filter ./filter1.py -o {}.html {} 

И обратите внимание на {}.html . {} Возвращает имя файла, заканчивающееся на .md , но я хочу, чтобы он просто возвращал имя файла без .md , поэтому скажем, что у меня есть файл с именем index.md , {} должен возвращать index , в результате чего создается файл с именем index.html , а затем приводит к имени файла с именем index.md.html .

Итак, как мне поступить об удалении .md в этой команде?

  • найти совпадающие файлы в одном каталоге и подкаталогах
  • Передача нескольких каталогов в параметр -prune в поиске
  • mv для записи
  • Как подключить вывод поиска к другому вызову find
  • печатать родительские каталоги полный путь вывода вывода
  • Как я могу искать файлы без определенных расширений в своих именах?
  • Копирование файлов, содержащих определенную структуру сохранения текста
  • Удаление пустых каталогов командой 'ls'
  • 2 Solutions collect form web for “find {} возвращает полное имя файла, но я просто хочу имя файла без расширения, поэтому index.md вернет индекс вместо index.md”

    Вы можете использовать -exec для создания новой оболочки bash, а затем манипулировать {} внутри оболочки, передав ее как параметр (к ней можно получить доступ как $0 в новой оболочке). Вы можете удалить конец файла .md с расширением параметра:

     find . -name '*.md' -type f -exec bash -c 'pandoc --filter ./filter1.py -o ${0%md}html' {} \; 

    Это будет работать.

    Например, рассмотрите файл .txt в текущем каталоге

     find . -type f -iname "*.txt" -exec basename \{\} .txt \; 
    Linux и Unix - лучшая ОС в мире.