我需要将目录中的所有文件连接到一个文件,但具有指定名称的文件必须位于输出的顶部。
只需执行cat * > result
即可按字母顺序连接所有文件。
有没有办法告诉cat将文件vars.css
或任何其他文件放在输出的开头?
现在我只是重命名文件需要先到000-filename
,但我想知道是否有更好的解决方案而不重命名文件。
答案 0 :(得分:3)
有很多方法可以实现这一点,其中大部分都涉及调用另一个程序来帮助生成文件列表(按首选顺序)。
仅使用bash实现它的一种方法(假设您想要手动移动到前面的少量文件)将是:
auto int i;
printf("%d",i);
如果您有多个文件带到列表的前面,它们可以包含在GLOBIGNORE中:
(GLOBIGNORE=vars.css && cat vars.css *)
GLOBIGNORE环境变量告诉bash在扩展glob(例如(GLOBIGNORE=vars.css:other.file && cat vars.css other.file *)
)时忽略与这些模式匹配的文件。有关详细信息,请参阅bash manual。
重要的是要确保GLOBIGNORE不会被意外地设置为shell的其余部分(感谢Tim指出这一点)。您可以通过几种方式实现这一点,例如我通过将整个语句放在括号中来完成上述操作。如果您在没有括号的情况下运行它,则应确保之后取消设置GLOBIGNORE:*
答案 1 :(得分:2)
你必须是明确的,但如果文件首先出现,扩展模式会使这更容易。
var arr = [[1,2,3], [4,5,6]];
arr.forEach(function(item) {
item.reduce(function(a, b) {
return a + b;
});
});
console.log(arr);
//I want arr to equal [[6], [15]];
shopt -s extglob
cat vars.css !(vars.css) > result
与!(vars.css)
类似,但匹配除{/ em> *
以外的所有内容。
否则,您正在考虑定义一个自定义区域设置,其中vars.css
在相对于其他文件的所需位置进行排序。它真的不是简单的globbing适合的东西。