find {} retorna o nome do arquivo completo, mas eu quero apenas o nome do arquivo sem a extensão, portanto index.md retornaria o índice em vez de index.md [duplicado]

0

Então eu tenho

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

E observe o {}.html . O {} retorna um nome de arquivo terminando com .md , mas eu quero apenas retornar o nome do arquivo sem o .md , então eu digo que eu tenho um arquivo chamado index.md , {} deve retornar index , resultando em um arquivo chamado index.html , em vez disso, resultando em um nome de arquivo chamado index.md.html .

Então, como eu faria para remover o .md desse comando?

    
por 01AutoMonkey 16.02.2015 / 13:33

2 respostas

1

Você pode usar -exec para criar um novo bash shell e manipular {} dentro do shell passando-o como um parâmetro (ele pode ser acessado como $0 no novo shell). Você pode remover o tipo de arquivo .md que termina com a expansão do parâmetro:

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

Funcionará.

Por exemplo, considere um arquivo .txt em um diretório atual

find . -type f -iname "*.txt" -exec basename \{\} .txt \;
    
por 16.02.2015 / 13:45