标签: glob

我怎样才能否定vim中的glob?

我正在尝试使用不包含"matcher"的目录中的所有文件名填充vim arglist.我可以使用包含"matcher"的文件名来填充它

args *matcher*
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法来否定glob来获取所有不匹配的文件?

vim glob

7
推荐指数
1
解决办法
307
查看次数

glob函数中的RegEx模式

我在函数中记录了一个文件名.我想从其他目录返回所有类似于此文件的文件(通过文件名).我写了这个:

    $thumbDir = $this->files_path.'thumbs/';
    $toglob = $thumbDir.pathinfo($name, PATHINFO_FILENAME ).'_[0-9]+\x[0-9]+_thb.'.pathinfo($name, PATHINFO_EXTENSION);
    foreach (glob($toglob) as $key => $value) {
        echo $value;
    }
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我搜索文件名为的文件:

oldFileName_[one or more digits]x[one or more digits]_thb.oldFileNameExtension
Run Code Online (Sandbox Code Playgroud)

如果有人帮我这个,我将非常感激:)

php regex filenames glob

7
推荐指数
1
解决办法
7645
查看次数

.gitignore路径匹配语法中的前导星号“ ** /”是否多余?

有没有用星号不能替代的用法?

Two consecutive asterisks ("**") in patterns matched against full
pathname may have special meaning:

A leading "**" followed by a slash means match in all directories.
For example, "**/foo" matches file or directory "foo" anywhere,
the same as pattern "foo". "**/foo/bar" matches file or directory
"bar" anywhere that is directly under directory "foo".

A trailing "/**" matches everything inside. For example, "abc/**"
matches all files inside directory "abc", relative to the location
of the .gitignore file, with infinite depth. …
Run Code Online (Sandbox Code Playgroud)

git glob gitignore

7
推荐指数
2
解决办法
1851
查看次数

CMake 通配生成的文件

我使用它是asn1c为了从一个或多个.asn1文件生成一系列文件.h并将.c其放入给定的文件夹中。

这些C 文件的名称与原始文件没有对应关系asn1

这些文件必须与我的文件链接在一起才能获得有效的可执行文件。我希望能够:

  • 自动在构建目录中生成文件,以避免污染项目的其余部分(可能用 完成add_custom_target
  • 指定我的可执行文件对这些文件的依赖关系,以便asn1c在文件丢失或其中一个.asn1文件已更新时自动运行可执行文件。
  • 自动将所有生成的文件添加到我的可执行文件的编译中。

由于预先不知道生成的文件,因此可以仅全局显示命令输出目录的内容asn1c- 只要该目录不为空,我就很高兴。

dependencies code-generation glob cmake

7
推荐指数
1
解决办法
3716
查看次数

将变量中的 shell glob 展开到数组中

在 bash 脚本中,我有一个包含 shell glob 表达式的变量,我想将其扩展为匹配文件名的数组(nullglob打开),例如

pat='dir/*.config'
files=($pat)
Run Code Online (Sandbox Code Playgroud)

即使对于$pat(eg, pat="dir/*.config dir/*.conf) 中的多个模式,这也很好用,但是,我不能在模式中使用转义字符。理想情况下,我希望能够做到

pat='"dir/*" dir/*.config "dir/file with spaces"'
Run Code Online (Sandbox Code Playgroud)

包含该文件,所有以和*结尾的文件。.configfile with spaces

是否有捷径可寻?(eval如果可能的话,没有。)

由于模式是从文件中读取的,因此我无法按照此答案(以及其他各个地方)中的建议将其直接放入数组表达式中。

编辑:

将事情放在上下文中:我想做的是逐行读取模板文件并处理所有行,例如#include pattern. 然后使用 shell glob 解析包含内容。由于该工具是通用的,因此我希望能够包含带有空格和奇怪字符(例如*)的文件。

“主”循环如下所示:

    template_include_pat='^#include (.*)$'
    while IFS='' read -r line || [[ -n "$line" ]]; do
        if printf '%s' "$line" | grep -qE "$template_include_pat"; then
            glob=$(printf '%s' "$line" | sed -nrE "s/$template_include_pat/\\1/p")
            cwd=$(pwd -P)
            cd "$targetdir" …
Run Code Online (Sandbox Code Playgroud)

bash glob

7
推荐指数
1
解决办法
2882
查看次数

如何对 glob.glob 进行数字排序?

我在一个文件夹中有一堆按数字排序的文件,当我尝试对 glob.glob 进行排序时,我从来没有以正确的顺序获得文件。


文件示例和预期输出排序

folder
------
C:\Users\user\Desktop\folder\1 sample.mp3
C:\Users\user\Desktop\folder\2 sample.mp3
C:\Users\user\Desktop\folder\3 sample.mp3
C:\Users\user\Desktop\folder\4 sample.mp3
C:\Users\user\Desktop\folder\5 sample.mp3
... over 800 files...
Run Code Online (Sandbox Code Playgroud)

我尝试过但输出似乎是随机的

folder
------
C:\Users\user\Desktop\folder\1 sample.mp3
C:\Users\user\Desktop\folder\2 sample.mp3
C:\Users\user\Desktop\folder\3 sample.mp3
C:\Users\user\Desktop\folder\4 sample.mp3
C:\Users\user\Desktop\folder\5 sample.mp3
... over 800 files...
Run Code Online (Sandbox Code Playgroud)

尝试按日期或大小排序不是解决方案。

更新 之前的所有答案效果很好:

files = sorted(glob.glob(f'{os.getcwd()}/*.mp3'), key=lambda x: (os.path.splitext(os.path.basename(x))[0]))


C:\Users\user\Desktop\folder\1 speech.mp3
C:\Users\user\Desktop\folder\10 speech.mp3 
C:\Users\user\Desktop\folder\100 speech.mp3
C:\Users\user\Desktop\folder\101 speech.mp3
C:\Users\user\Desktop\folder\102 speech.mp3
C:\Users\user\Desktop\folder\103 speech.mp3  
C:\Users\user\Desktop\folder\104 speech.mp3
C:\Users\user\Desktop\folder\105 speech.mp3
C:\Users\user\Desktop\folder\106 speech.mp3
C:\Users\user\Desktop\folder\107 speech.mp3
C:\Users\user\Desktop\folder\108 speech.mp3
C:\Users\user\Desktop\folder\109 speech.mp3
C:\Users\user\Desktop\folder\11 speech.mp3 
Run Code Online (Sandbox Code Playgroud)

python sorting glob list

7
推荐指数
2
解决办法
9527
查看次数

Powershell 全局模式匹配

我正在查找C:\ProgramFiles名为 的 jar 文件log4j-core-x.y.z.jar。我试图匹配最后一位数字z,它可以是一位数也可以是两位数(0-99)。我似乎无法获得正确的全局模式来完成此任务。

Code:

PS C:\Users\Administrator> Get-ChildItem -Path 'C:\Program Files\' -Filter log4j-core-*.*.[1-9][0-9].jar -Recurse -ErrorAction SilentlyContinue -Force | %{$_.FullName}
Run Code Online (Sandbox Code Playgroud)

这不会产生任何结果,但是当我只执行所有通配符时,如 ,-Filter log4j-core-*.*.*.jar我得到:

C:\Program Files\apache-log4j-2.16.0-bin\apache-log4j-2.16.0-bin\log4j-core-2.16.0-javadoc.jar
C:\Program Files\apache-log4j-2.16.0-bin\apache-log4j-2.16.0-bin\log4j-core-2.16.0-sources.jar
C:\Program Files\apache-log4j-2.16.0-bin\apache-log4j-2.16.0-bin\log4j-core-2.16.0-tests.jar
C:\Program Files\apache-log4j-2.16.0-bin\apache-log4j-2.16.0-bin\log4j-core-2.16.0.jar
Run Code Online (Sandbox Code Playgroud)

我唯一关心的是C:\Program Files\apache-log4j-2.16.0-bin\apache-log4j-2.16.0-bin\log4j-core-2.16.0.jarlog4j-core-2.16.0.jar

windows powershell glob

7
推荐指数
1
解决办法
7064
查看次数

如何正确使用 Pathlib 中的正则表达式?

我想找到所有图像并尝试使用 pathlib,但我的 reg 表达式不起作用。我哪里错了?

from pathlib import Path
FILE_PATHS=list(Path('./photos/test').rglob('*.(jpe?g|png)'))
print(len(FILE_PATHS))
FILE_PATHS=list(Path('./photos/test').rglob('*.jpg'))#11104
print(len(FILE_PATHS))

0
11104
Run Code Online (Sandbox Code Playgroud)

python glob pathlib

7
推荐指数
1
解决办法
5973
查看次数

如何在 perl 中使用 globbing 来处理包含多个文件的一行,避免使用 xargs/find/etc

当有太多匹配文件时,bash如果您在命令行上包含 glob 模式,则 shell 会像中断一样

perl -pi -e 's/hi/bye/' too_many_files*
Run Code Online (Sandbox Code Playgroud)

您可以使用xargs、 gnuparallel或来解决此find问题,但对于复杂的命令,这些命令可能很难在引用方面正确使用,而且它们的效率也可能低于运行perl一次。

有没有办法使用 的perl内置通配支持来实现类似的功能?(这不起作用)

perl -pi -e 's/hi/bye/' 'manyfiles*' # <-- Does not work.
Run Code Online (Sandbox Code Playgroud)

shell perl glob

7
推荐指数
1
解决办法
397
查看次数

双星号是否包含当前目录?

以下问题询问双星号 (**) 通配符是什么意思?

那里的许多答案表明**包括当前目录以及子目录。

但是,当我在 bash 控制台中测试它时,它似乎只列出子目录中的文件。以下都只列出子目录文件

$ find **/*.md
docs/architecture.md
docs/autodetect.md
# ...

$ ls -d **/*.md
docs/architecture.md
docs/autodetect.md
# ...
Run Code Online (Sandbox Code Playgroud)

尽管当前目录中有.md文件

$ ls -d *.md
CODE_OF_CONDUCT.md  CONTRIBUTING.md  README.md  SECURITY.md
Run Code Online (Sandbox Code Playgroud)

我是否误解了所引用问题的答案,或者我是否错误地测试了模式?

如何确定脚本中的命令对当前目录和子目录中的文件进行操作?

bash glob

6
推荐指数
1
解决办法
818
查看次数