findとaspelを一緒に使う

findとaspelを一緒に使う

現在、ディレクトリ内のすべてのファイルのスペルチェックを試みていますが、*.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

  • 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
    

答え2

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

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

答え3

同意します。xargswithを使用するfindことは重複していますが、入力が他のものから来る場合持つを使用するには、xargs以下を使用してください-o

grep -rl 'draft: false' | xargs -o -n1 aspell check --sug-mode=slow

man xargsそれは言う:

-oコマンドを実行する前に、サブプロセスで/ dev / ttyでstdinを再度開きます。これは、xargsに対話型アプリケーションを実行させる場合に便利です。

関連情報