web-dev-qa-db-ja.com

findとaspellを一緒に使用する

現在のディレクトリにあるすべての*.mdファイルのスペルチェックを試みていますが、次のコマンドが失敗します。

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

これは、aspellがユーザーと対話するためにstdinを必要とし、どういうわけかxargsがそれを提供しないためだと思います。 Twitterでハック

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

しかし、これは毎回新しいxtermを開きます。 findコマンドの結果に対して個別にaspellを実行する場合と同じように、元のコマンドを機能させるにはどうすればよいですか?

1
Hooked
  • xargsはまったく必要ありません。execオプションを使用するだけです。

    find . -maxdepth 1 -name "*.md" -exec aspell check {} \;
    
  • そして、あなたや将来の読者が本当にxargsを使用する必要がある場合に備えて、新しいシェルを生成し、ターミナルから標準入力を取得することでそれを行うことができます(/dev/tty):

    find . -maxdepth 1 -name "*.sh" | xargs -n1 sh -c 'aspell check "$@" < /dev/tty' aspell
    
3
jimmij

いつでも単純なループを使用できます。

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