6

jsonlint を使用して、ディレクトリ内の一連のファイルを (再帰的に) リントしています。次のコマンドを書きました。

find ./config/pages -name '*.json' -print0 | xargs -0I % sh -c 'echo Linting: %; jsonlint -V ./config/schema.json -q %;'

ほとんどのファイルで機能しますが、一部のファイルでは次のエラーが発生します。

Linting: ./LONG_FILE_NAME.json
fs.js:500
 return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                ^
  Error: ENOENT, no such file or directory '%'

長いファイル名では失敗するようです。これを修正する方法はありますか?ありがとう。

編集 1: 問題が見つかりました。

-I replstr

入力行ごとに utility を実行し、utility への最大置換 (-R フラグが指定されていない場合は 5 つ) の引数の 1 つまたは複数の replstr を入力行全体に置き換えます。置換後の結果の引数は、255 バイトを超えることはできません。これは、replstr を含む引数をできる限り多く、utility への構成された引数に最大 255 バイトまで連結することによって実装されます。255 バイトの制限は、replstr を含まない utility への引数には適用されません。さらに、utility 自体では置換は行われません。-x を意味します。

編集 2: 部分的な解決策。以前よりも長いファイル名をサポートしていますが、それでも必要な長さではありません。

find ./config/pages -name '*.json' -print0 | xargs -0I % sh -c 'file=%; echo Linting: $file; jsonlint -V ./config/schema.json -q $file;'

4

3 に答える 3