使用find、xargs等輸出類似名稱的文件

使用find、xargs等輸出類似名稱的文件

我有一個充滿 HTML 文件的資料夾:

001.htm
002.htm
003.htm

我想在它們上運行 Pandoc 將它們轉換為類似名稱的 Markdown 文件:

001.md
002.md
003.md

此命令適用於其中之一:

pandoc -f html -t markdown 001.htm -o 001.md

我想對資料夾中的每個文件使用findxargs自動運行類似的命令。

我到目前為止:

find *.htm | xargs -I {} -n 1 pandoc -f html -t markdown -o {}

……這會截斷目錄中的每個文件,所以現在我要先問一下真的打破一些東西。

我上面的命令有什麼問題,和/或完全不同/更有效的方法是什麼?

答案1

我成功地用這 1 個襯墊做到了這一點。如果您對xargs和部分靈活的話find

for f in ./*.htm; do pandoc -f html -t markdown "$f" -o "${f%.htm}.md"; done

如果您想要遞歸操作(例如:.htm目前目錄中的所有檔案和所有子目錄),那麼(假設 bash 4+)您可以使用globstarshell 選項:

shopt -s globstar
for f in ./**/*.htm; do pandoc -f html -t markdown "$f" -o "${f%.htm}.md"; done

答案2

對於某些情況使用{}不夠靈活。這似乎就是其中之一。

一個可能的解決方法是使用-exec來自 的腳本find,如下所示:

find . -name '*.htm' -exec ./convert-to-md.sh {} \;

腳本檔案應與此類似,具體取決於特定的pandoc命令列:

#!/bin/bash
pandoc -f html -t markdown -o "${1/.htm/.md}" "${1}"

如果您不想為此創建並保存腳本文件,您可以隨時內聯bash腳本代碼:

find . -name '*.htm' | xargs -n 1 bash -c 'pandoc -f html -t markdown -o "${1/.htm/.md}" "${1}"' -

-末尾的附加項用於$0填寫 bash,其中通常包括 shell 腳本的名稱、以$0.

這允許您繼續使用find(即使-print0xargs -0正在處理奇怪的檔案名稱),但不需要建立單獨的檔案。

答案3

{}您似乎在 pandoc 指令中缺少 a

find . -name \*.htm | xargs -I {} -n 1 pandoc -f html -t markdown {} -o {}.md

但隨後您將獲得一份名為001.htm.md— 的文件,您必須確定這是否是一個問題。

相關內容