Find

一起使用 find 和 aspell

  • June 30, 2020

我正在嘗試拼寫檢查*.md目前目錄中的所有文件,但以下命令失敗:

>> find . -maxdepth 1 -name "*.md" | xargs -I {} aspell check {}
xargs: aspell: exited with status 255; aborting

我假設這是因為aspell需要stdin與使用者互動並且以某種方式xargs不提供它。我在 Twitter 上發現了一個 hack

find . -maxdepth 1 -name "*.md" | xargs -n 1 xterm -e aspell check

但這每次都會打開一個新的 xterm。我怎樣才能讓我的原始命令像單獨執行aspell我的 find 命令的結果一樣工作?

  • 您根本不需要xargs,只需使用exec選項:
find . -maxdepth 1 -name "*.md" -exec aspell check {} \;
  • 以防萬一您或任何未來的讀者真的需要使用xargs- 您可以通過生成新的 shell 並從終端 ( /dev/tty) 獲取標準輸入來做到這一點:
find . -maxdepth 1 -name "*.sh" | xargs -n1 sh -c 'aspell check "$@" < /dev/tty' aspell

你總是可以只使用一個簡單的循環:

for f in *.md; do aspell check "$f"; done

引用自:https://unix.stackexchange.com/questions/180995