【问题标题】:Glob pattern for everything including hidden files包括隐藏文件在内的所有内容的 Glob 模式
【发布时间】:2022-07-31 01:12:32
【问题描述】:

我试图获得一个包含每个子目录中每个文件的 glob 模式,但我不知道如何包含隐藏文件。

例如,所有这些都应该匹配:

.git
.github/workflow.yml
index.js
src/index.js
src/components/index.js

这适用于所有具有名称和扩展名的文件,但会忽略隐藏文件:

**/**

更具体的背景:我想使用archiver 库创建一个包含除node_modules(可能还有其他一些)之外的所有文件的存档。

archive.directory("???", {
    ignore: ["node_modules/", ...some other files],
});

【问题讨论】:

  • 您可以使用 {.,}** 将隐藏文件包含在所有文件中,或者在声明之前键入 unset GLOBIGNORE 以包含隐藏文件
  • 但与{.,}** .github/workflow.yml 不匹配。我需要包括所有内容。
  • 这是大括号扩展,它只是分别放置 .* 和 *,因为第一个以点 (.) 开头,它应该包含隐藏文件,因为它们也以点开头。没有尝试我发给你的命令,只是随便玩玩我应该可以工作

标签: javascript linux glob


【解决方案1】:

最好的方法可能是使用两种单独的模式,一种匹配隐藏文件,另一种匹配非隐藏文件。 一种方法是.* *。但是,这与目录本身 . 和父目录 .. 匹配,这通常不是您想要的。

避免这个问题的模式是.??* *。假设您的目录中有以下文件。

file1  file2  .hidden

正如您在下面的示例中所见,此 glob 模式匹配隐藏文件和非隐藏文件,但不匹配当前目录或其父目录。

$ ls -l .??* *
-rw-r--r-- 1 amy users 0 Jul 30 18:00 file1
-rw-r--r-- 1 amy users 0 Jul 30 18:00 file2
-rw-r--r-- 1 amy users 0 Jul 30 18:00 .hidden

【讨论】:

    猜你喜欢
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    相关资源
    最近更新 更多