我正在尝试使用不包含"matcher"的目录中的所有文件名填充vim arglist.我可以使用包含"matcher"的文件名来填充它
args *matcher*
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法来否定glob来获取所有不匹配的文件?
我在函数中记录了一个文件名.我想从其他目录返回所有类似于此文件的文件(通过文件名).我写了这个:
$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)
如果有人帮我这个,我将非常感激:)
有没有用星号不能替代的用法?
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) 我使用它是asn1c为了从一个或多个.asn1文件生成一系列文件.h并将.c其放入给定的文件夹中。
这些C 文件的名称与原始文件没有对应关系asn1。
这些文件必须与我的文件链接在一起才能获得有效的可执行文件。我希望能够:
add_custom_target)asn1c在文件丢失或其中一个.asn1文件已更新时自动运行可执行文件。由于预先不知道生成的文件,因此可以仅全局显示命令输出目录的内容asn1c- 只要该目录不为空,我就很高兴。
在 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) 我在一个文件夹中有一堆按数字排序的文件,当我尝试对 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) 我正在查找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.jar,log4j-core-2.16.0.jar
我想找到所有图像并尝试使用 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) 当有太多匹配文件时,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) 以下问题询问双星号 (**) 通配符是什么意思?
那里的许多答案表明**包括当前目录以及子目录。
但是,当我在 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)
我是否误解了所引用问题的答案,或者我是否错误地测试了模式?
如何确定脚本中的命令对当前目录和子目录中的文件进行操作?