目录 * 和文件顺序
Cat * and order of files
我需要将目录中的所有文件连接到一个文件中,但具有指定名称的文件必须位于输出的顶部。
只需执行 cat * > result
即可按字母顺序连接所有文件。
有没有办法告诉 cat 将文件 vars.css
或任何其他文件放在输出的开头?
现在我只是重命名文件需要先到 000-filename
但我想知道是否有更好的解决方案而不重命名文件。
你必须明确,但如果文件应该放在第一位,扩展模式会更容易一些。
shopt -s extglob
cat vars.css !(vars.css) > result
!(vars.css)
类似于 *
,但匹配所有内容 除了 vars.css
.
否则,您正在考虑定义自定义语言环境,其中 vars.css
在相对于其他文件的所需位置排序。这真的不是简单的globbing适合的东西。
有很多方法可以实现这一点,其中大部分都涉及调用另一个程序来帮助生成文件列表(按首选顺序)。
一种仅使用 bash 实现它的方法(并假设您想要手动移动到前面的少量文件)是:
(GLOBIGNORE=vars.css && cat vars.css *)
如果您有多个文件要放在列表的前面,它们可以包含在 GLOBIGNORE 中:
(GLOBIGNORE=vars.css:other.file && cat vars.css other.file *)
GLOBIGNORE 环境变量告诉 bash 在扩展 glob 时忽略与这些模式匹配的文件(例如 *
)。有关详细信息,请参阅 bash manual。
重要的是要确保 GLOBIGNORE 不会意外地设置为 shell 的其余部分(感谢 Tim 指出)。您可以通过多种方式实现这一点,例如我在上面通过将整个语句放在括号内所做的。如果你 运行 它没有括号,你应该确保你在之后取消设置 GLOBIGNORE:unset GLOBIGNORE
我需要将目录中的所有文件连接到一个文件中,但具有指定名称的文件必须位于输出的顶部。
只需执行 cat * > result
即可按字母顺序连接所有文件。
有没有办法告诉 cat 将文件 vars.css
或任何其他文件放在输出的开头?
现在我只是重命名文件需要先到 000-filename
但我想知道是否有更好的解决方案而不重命名文件。
你必须明确,但如果文件应该放在第一位,扩展模式会更容易一些。
shopt -s extglob
cat vars.css !(vars.css) > result
!(vars.css)
类似于 *
,但匹配所有内容 除了 vars.css
.
否则,您正在考虑定义自定义语言环境,其中 vars.css
在相对于其他文件的所需位置排序。这真的不是简单的globbing适合的东西。
有很多方法可以实现这一点,其中大部分都涉及调用另一个程序来帮助生成文件列表(按首选顺序)。
一种仅使用 bash 实现它的方法(并假设您想要手动移动到前面的少量文件)是:
(GLOBIGNORE=vars.css && cat vars.css *)
如果您有多个文件要放在列表的前面,它们可以包含在 GLOBIGNORE 中:
(GLOBIGNORE=vars.css:other.file && cat vars.css other.file *)
GLOBIGNORE 环境变量告诉 bash 在扩展 glob 时忽略与这些模式匹配的文件(例如 *
)。有关详细信息,请参阅 bash manual。
重要的是要确保 GLOBIGNORE 不会意外地设置为 shell 的其余部分(感谢 Tim 指出)。您可以通过多种方式实现这一点,例如我在上面通过将整个语句放在括号内所做的。如果你 运行 它没有括号,你应该确保你在之后取消设置 GLOBIGNORE:unset GLOBIGNORE