2014-04-23 15 views
10

Bir dizinde ve alt dizinlerde çok sayıda html dosyası var. Komut satırı üzerinden js-beautify komutunu çalıştırabilir ve tüm bu dosyalara yinelemeli olarak uygulamak isteyebilirim.Yinelemeli olarak nasıl JS-Güzelleştirebilirim?

find . -name "*.html" -type f | js-beautify -r ve js-beautify -r | find . -name "*.html" -type f'u denedim ancak çalışmıyor. Ben

herkes nasıl bu iki komut boru edilmelidir söyleyebilir (alt dizinde bir dizindeki tüm dosyaların durumunda değil) js-beautify -r myfile.html veya js-beautify -r *.html gibi bir şey vermek Ancak, JS-güzelleştirin çalışır?

+2

'Bul. -name "* .html" -type f -exec js-beautify -r {} \; ' – devnull

+2

@devnull^^^Bana iyi görünüyor. Neden cevap vermiyorsun? –

+0

@PervySage Nasıl başarısız olur? Hangi hataları (varsa) alırsınız? –

cevap

12

Ancak JS-Güzelleştirmek alt dizininde bir dizindeki tüm dosyaların durumunda ... çalışır ancak

Sen işleri JS-güzelleştirme bahsettin eğer tüm giriş dosyalar aynı dizinde. Komutunuz muhtemelen çalışmaz, çünkü farklı dizinlerdeki giriş dosyalarını içeren find arasındaki tüm sonuçları iletebilirsiniz.

comment önce de belirtildiği gibi, bunun yerine -exec kullanabilirsiniz: Ben benzer bir sorun haline çalıştırın ve glob-run kullanarak basit çapraz platform çözüm buldum

find . -type f -name "*.html" -exec js-beautify -r {} \; 
+1

Biri bunu Mac'te yapıyorsa ve -r komutu çalışmıyorsa, bunun yerine çalışmayı başarabildim: 'Bul. -type f -name "* .js" -exec sh -c 'js-güzelleştirmek {} >> {}' \; ' – Tiago

+0

Veya' bulmak. -type f -name "* .js" -exec sh -c 'js-güzelleştirmek {}> {} 2; mv {} 2 {}' \; 'tam olarak çalışmıyorsa. Belki birisinin bunu daha iyi/daha verimli bir yolu vardır. – Tiago

+0

Muhtemelen bu cevap zamanında çalışıyordu ama şu anda bu komut içinde kullanıldığında html dosyaları (muhtemelen js) üzerinde yanlış güzelleştirici yürütme js-güzelleştirmek gibi görünüyor – Andrey

4

+ xargs yolunu bulmanın yoludur. -exec ile bulmaktan daha hızlıdır.

find . -name '*.html' | xargs js-beautify 

nedense, kendi Dosya adlarında boşluklar olan, varsa, böyle yapmak isteyeceksiniz ... Nihayet

find . -name '*.html' -print0 | xargs -0 js-beautify 

, garip bir nedenden ötürü, js-güzelleştirmek eğer Birden çok argümanla çalışmaz, sonra xargs'a bir seferde yalnızca bir argüman iletmesini söylemeniz gerekir. Bu, -exec seçeneğini kullanmaktan çok farklı değil, ancak daha iyi IMO, çünkü daha tutarlı.

find . -name '*.html' | xargs -n 1 js-beautify 

Not sen xargs -n 1 ile -print0 ve xargs -0 seçenekleri birleştirebilirsiniz.

düzenleme: T.J. Kalabalık, kabuk çift tırnak içinde joker karakterler küreyemez. Bu benim için bir haberdi, belki de bunun doğru olmadığı bazı eski ortamlar var ve umarım asla onun içinde çalışmaya zorlanmayacaksınız.

+0

Kabuk, çift tırnakta kalıyorsa onları çekecek mi? Buna hiç rastlamadım. (Diğer bir deyişle, komutu eşleştirdiğimde kabuk yalnızca geçerli dizinde yalnızca dosyaları sıkıştırdığı için bu özelliklerle eşleşen alt dizinlerdeki dosyaları kaçırmadım.) –

+0

Yanıtladığınız yayınlarda diğer yanıtları reddederseniz, Ayrıca, cevapta nelerin geliştirilebileceğine dair bir not bırakmayı düşünebilirsiniz. – devnull

+0

@devnull -exec seçeneğini kullanmanın neden iyi bir seçenek olmadığını belirtmiştim. Herkesin problem boyutu için kabul edilemez olan hız sorununa ek olarak, -exec seçeneğinin sözdizimi açıklamak daha zordur. Örneğin. \; Son olarak, xargs'ın nasıl çalıştığını bilmek diğer durumlarda çok faydalıdır. Örneğin. Bir dosya adı dosyanız olduğunda, bir komutu çalıştırmak istediğinizde. Konuyla ilgili böyle hissediyorum. Bütün bunlara rağmen, haklısın. Bunun yerine bir yorum bırakmış olmalıydım. SO cevabı değiştirmeme izin vermiyor. – Bill

10

:

npm i -g glob-run js-beautify 
glob-run html-beautify -r **/*.html 

Yine de, supported globs itself js-güzelleştirmek güzel olurdu.

+0

Awesome! Teşekkür ederim. – dude

2

1) scripts/format.js

const jsBeautify = require('js-beautify')['js_beautify']; 
const fs = require('fs'); 
const glob = require('glob'); 

const options = { 
    indent_size: 2, 
    indent_char: ' ', 
    indent_with_tabs: false, 
    eol: '\n', 
    end_with_newline: true, 
    indent_level: 0, 
    preserve_newlines: true, 
    max_preserve_newlines: 10, 
    space_in_paren: false, 
    space_in_empty_paren: false, 
    jslint_happy: false, 
    space_after_anon_function: false, 
    brace_style: 'collapse', 
    break_chained_methods: false, 
    keep_array_indentation: false, 
    unescape_strings: false, 
    wrap_line_length: 0, 
    e4x: false, 
    comma_first: false, 
    operator_position: 'before-newline' 
}; 

glob('**/!(node_modules)/**/*.js', { absolute: true }, (er, files) => { 
    files.forEach(file => { 
    console.log(`js-beautify ${file}`); 
    const data = fs.readFileSync(file, 'utf8'); 
    const nextData = jsBeautify(data, options); 
    fs.writeFileSync(file, nextData, 'utf8'); 
    }); 
}); 

3) sizin projede package.json

"scripts": { 
    "format": "node ./scripts/format.js" 
} 

4) bir format komut dosyasını ekleyin oluşturma projesi

npm install --save-dev glob js-beautify 

2) için bu bağımlılıkları ekleyin ,

numaralı telefonu çalıştırın.
npm run format 
+0

Harika çalışıyor! Ev projesi klasörünün ve alt dizinlerinin tüm Javascript içeriği güzelleşir. – habamedia

İlgili konular