linux Glob模式的一切,包括隐藏文件

j0pj023g  于 2023-08-03  发布在  Linux
关注(0)|答案(2)|浏览(158)

我试图得到一个包含每个子目录中的每个文件的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],
});

k4aesqcs

k4aesqcs1#

最好的方法可能是使用两个单独的模式,其中一个匹配隐藏文件,另一个匹配非隐藏文件。一种方法是.* *。但是,这与目录本身.和父目录..匹配,这通常不是您想要的。
避免这个问题的模式是.??* *。假设您的目录中有以下文件。

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

goucqfw6

goucqfw62#

我在使用Archiver库时遇到了同样的问题。我在文档中读到它正在使用minmatch库作为glob模式。库为特定问题提供选项。这是文档中的位置。要获取所有文件、目录(递归)和隐藏文件(如“.npmrc”),您需要使用“archive.glob”而不是“archive.directory”。
我的代码看起来像这样:

archive.glob('**/*', {
  cwd: __dirname,
  dot: true,
  ignore: ['node_modules/**', '<name of your zipfile>.zip']
});

字符串
我已经传递了选项“点:true”,现在它也包括隐藏文件。
最后的代码看起来像这样:

const fs = require('fs');
const archiver = require('archiver');

const zipname = "the name of your zipfile"

const output = fs.createWriteStream(__dirname + `/${zipname}.zip`);
const archive = archiver('zip', { zlib: { level: 9 } });

output.on('close', function () {
  console.log(archive.pointer() + ' total bytes');
  console.log('archiver has been finalized and the output file descriptor has closed.');
});

archive.on('error', function (err) {
  throw err;
});

archive.pipe(output);

archive.glob('**/*', {
  cwd: __dirname,
  dot: true,
  ignore: ['node_modules/**', `${zipname}.zip`]
}
);

archive.finalize();

相关问题