find {} 返回完整的文件名,但我只想要不带扩展名的文件名,因此index.md 将返回index 而不是index.md

find {} 返回完整的文件名,但我只想要不带扩展名的文件名,因此index.md 将返回index 而不是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这个命令中的 呢?

答案1

它会起作用的。

例如,考虑.txt当前目录中的文件

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

答案2

您可以使用-exec它创建一个新的 bash shell,然后{}通过将其作为参数传递来在 shell 内部进行操作(可以像$0在新 shell 中一样访问它)。您可以删除.md以参数扩展结尾的文件类型:

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

相关内容