2016-03-25 17 views
1

Bir dizinde (yinelemeli olarak) bir grup dosyayı tüpe aktarmak için jsonlint kullanıyorum.xargs komut uzunluğu sınırları

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

Çoğu dosyaları ama aşağıdaki hatayı alıyorum bazı dosyalar için çalışır:

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

Uzun dosya adları için başarısız gibi görünüyor ben aşağıdaki komutu yazdım. Bunu düzeltmenin bir yolu var mı? Teşekkürler.

Düzeltme 1: Sorun bulundu.

-I replstr

Execute utility for each input line, replacing one or more occurrences of replstr in up to replacements (or 5 if no -R flag is specified) arguments to utility with the entire line of input. The resulting arguments, after replacement is done, will not be allowed to grow beyond 255 bytes; this is implemented by concatenating as much of the argument containing replstr as possible, to the con-structed arguments to utility, up to 255 bytes. The 255 byte limit does not apply to arguments to utility which do not contain replstr, and furthermore, no replacement will be done on utility itself. Implies -x.

Düzenleme 2: Kısmi çözüm. Daha önce olduğundan daha uzun dosya adlarını destekler ancak yine de gerektiği kadar uzun değil.

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

+0

görünüyor, o Xargs değil Xargs –

+0

ben de sorunu değil sadece harika bir çözüm bulduk. Düzenlemeleri görün. –

+0

'xngs' komutunu bir json dosyasını bir defada' -n 1' ileterek işleyebilirsiniz. Ya da belki birkaç dosya kırılma noktasından daha az bir zamanda geçerek -n 20'yi geçerek örneğin .. – alvits

cevap

0

Xargs için find yerine boru kullan -exec. Sorun jsonlint ile gibi

find ./config/pages -name '*.json' -print0 -exec echo Linting: {} \; -exec jsonlint -V ./config/schema.json -q {} \;