Per*_*age 14 javascript bash shell
我在目录和子目录中有很多html文件.我可以js-beautify
通过命令行执行命令,并希望以递归方式将其应用于所有这些文件.
我试过了
找 .-name" .html"-type f | js-beautify -r
and
js-beautify -r | 找 .-name" .html"-type f
但它不起作用.然而,JS-美化确实工作,如果我看到这样的信息js-beautify -r myfile.html
或者js-beautify -r *.html
(在一个目录下的所有文件的情况下,而不是在子目录)
任何人都可以告诉我应该如何处理这两个命令?
dev*_*ull 17
但是,JS-beautify确实有效......如果目录中的所有文件都存在,但不在子目录中
您已经提到,如果所有输入文件都在同一目录中,则JS-beautify可以正常工作.您的命令可能不起作用,因为您传递的所有结果find
可能包含来自不同目录的输入文件.
如前面的评论中所述,您可以使用-exec
:
find . -type f -name "*.html" -exec js-beautify -r {} \;
Run Code Online (Sandbox Code Playgroud)
1j0*_*j01 15
我遇到了类似的问题,并使用glob-run找到了一个简单的跨平台解决方案:
npm i -g glob-run js-beautify
glob-run html-beautify -r **/*.html
Run Code Online (Sandbox Code Playgroud)
不过,如果js-beautify 支持globs本身会很好.
find+xargs 是要走的路。它比使用 -exec 查找要快。
find . -name '*.html' | xargs js-beautify
Run Code Online (Sandbox Code Playgroud)
如果由于某种原因,你的文件名中有空格,你会想要这样做......
find . -name '*.html' -print0 | xargs -0 js-beautify
Run Code Online (Sandbox Code Playgroud)
最后,如果由于某种奇怪的原因,js-beautify 不能处理多个参数,那么您需要告诉 xargs 一次只传递一个参数。这与使用 -exec 选项没有太大区别,但 IMO 更好,因为它更一致。
find . -name '*.html' | xargs -n 1 js-beautify
Run Code Online (Sandbox Code Playgroud)
请注意,您可以将-print0
和xargs -0
选项与xargs -n 1
.
编辑:正如 TJ Crowder 所指出的,shell 不会在双引号中使用通配符。这对我来说是个新闻,也许有一些古老的环境并非如此,希望你永远不会被迫在其中工作。
1)将这些依赖项添加到项目中
npm install --save-dev glob js-beautify
Run Code Online (Sandbox Code Playgroud)
2)创建 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');
});
});
Run Code Online (Sandbox Code Playgroud)
3)添加format
脚本package.json
"scripts": {
"format": "node ./scripts/format.js"
}
Run Code Online (Sandbox Code Playgroud)
4)在你的项目中,运行
npm run format
Run Code Online (Sandbox Code Playgroud)