Cat *和文件顺序

时间:2016-09-30 17:15:09

标签: bash cat

我需要将目录中的所有文件连接到一个文件,但具有指定名称的文件必须位于输出的顶部。 只需执行cat * > result即可按字母顺序连接所有文件。 有没有办法告诉cat将文件vars.css或任何其他文件放在输出的开头? 现在我只是重命名文件需要先到000-filename,但我想知道是否有更好的解决方案而不重命名文件。

2 个答案:

答案 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适合的东西。