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;'