find {}는 전체 파일 이름을 반환하지만 확장자 없이 파일 이름만 원하므로 index.md는 index.md 대신 index를 반환합니다.

find {}는 전체 파일 이름을 반환하지만 확장자 없이 파일 이름만 원하므로 index.md는 index.md 대신 index를 반환합니다.

그래서 나는 가지고있다

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

그리고 {}.html. 는 로 {}끝나는 파일 이름을 반환 .md하지만 가 없는 파일 이름만 반환하기를 원하므로 반환해야 하는 파일 .md이 있다고 가정하면 file name이라는 파일을 생성하는 대신 이라는 파일을 생성합니다 .index.md{}indexindex.htmlindex.md.html

.md그렇다면 이 명령에서 이를 어떻게 제거합니까 ?

답변1

작동합니다.

예를 들어, .txt현재 디렉터리의 파일을 고려해보세요.

find . -type f -iname "*.txt" -exec basename \{\} .txt \;

답변2

이를 사용 -exec하여 새 bash 쉘을 생성한 다음 {}이를 인수로 전달하여 쉘 내부에서 작동할 수 있습니다( $0새 쉘에서와 같이 액세스할 수 있음). .md매개변수 확장자로 끝나는 파일 형식을 제거할 수 있습니다 .

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

관련 정보