我在目录和子目录中有很多html文件。我可以通过命令行执行js-beautify
命令,并希望以递归方式将其应用于所有这些文件。
我试过了
找到。 -name" .html" -type f | js-beautify -r and
js-beautify -r |找 。 -name" .html" -type f
但它不起作用。但是,如果我提供类似js-beautify -r myfile.html
或js-beautify -r *.html
的内容(如果目录中的所有文件但不在子目录中),则JS-beautify会起作用
任何人都可以告诉我应该如何处理这两个命令?
答案 0 :(得分:17)
然而,JS-beautify确实有效......如果目录中的所有文件都存在,但不在子目录中
您已经提到如果所有输入文件都在同一目录中,则JS-beautify可以正常工作。您的命令可能无法正常工作,因为您传递了find
的所有结果,其中可能包含来自不同目录的输入文件。
如前面的评论中所述,您可以改为使用-exec
:
find . -type f -name "*.html" -exec js-beautify -r {} \;
较新版本的GNU find
可能会使用以下语法:
find . -type f -name "*.html" -exec js-beautify -r {} +
答案 1 :(得分:14)
我遇到了类似的问题,并使用glob-run找到了一个简单的跨平台解决方案:
npm i -g glob-run js-beautify
glob-run html-beautify -r **/*.html
如果js-beautify supported globs itself会很好。
答案 2 :(得分:5)
1)将这些依赖项添加到项目中
library(R2jags)
m <- 6 # number of problems
n <- 2 # number of people
V <- matrix(c(0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0)), nrow=m, ncol=3, byrow = T)
answer <- matrix(c(2,3,1,1,2,3,1,1,1,1,3,2), nrow=n, ncol=m, byrow = T)
data <- list("m", "n", "V", "answer")
myinits <- list(list(tau = rep(1,n)))
parameters <- c("tau")
samples <- jags(data, inits=myinits, parameters,
model.file ="model.txt", n.chains=1, n.iter=1000,
n.burnin=1, n.thin=1, DIC=T)
2)创建npm install --save-dev glob js-beautify
scripts/format.js
3)将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');
});
});
脚本添加到format
package.json
4)在你的项目中,运行
"scripts": {
"format": "node ./scripts/format.js"
}
答案 3 :(得分:4)
找到+ xargs是要走的路。它比使用-exec更快。
find . -name '*.html' | xargs js-beautify
如果由于某种原因,你的文件名中有空格,你会想要这样做......
find . -name '*.html' -print0 | xargs -0 js-beautify
最后,如果由于一些奇怪的原因,js-beautify不能使用多个参数,那么你需要告诉xargs一次只传入一个参数。这与使用-exec选项没什么不同,但它更好的IMO,因为它更加一致。
find . -name '*.html' | xargs -n 1 js-beautify
注意,您可以将-print0
和xargs -0
选项与xargs -n 1
结合使用。
编辑:正如T.J.所指出的那样。克劳德,外壳不会用双引号打出通配符。这对我来说是新闻,也许那里有一些古老的环境,那是不可能的,希望你永远不会被迫在其中工作。
答案 4 :(得分:1)
截至file globs are supported(发布于2018年12月)似乎v1.8.9。 For example:
js-beautify --html --replace '**/*.html'
答案 5 :(得分:0)
结合以上Bill的智慧和these answers on regexp matching,这是我项目的实际解决方案:
查找。 -regextype egrep -regex'./(src|test|app)/.*.(js|sass|html)'-print0 | xargs -0 ./node_modules/.bin/js-beautify -r
Button btn_edit;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView=inflater.inflate(R.layout.multi_frag,container,false);
btn_edit=(Button)rootView.findViewById(R.id.edit);
btn_edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
return inflater.inflate(R.layout.activity_account,container,false);
}
)-r
)在package.json脚本中使用时,./node_modules/.bin
自动位于路径中,./node_modules/.bin
需要转义到\.*
,因此:
\\.*
→
"beautify2": "find . -regextype egrep -regex './(src|test|app)/.*\\.(js|sass|html)' -print0 | xargs -0 js-beautify -r"