标签: glob

如何在Bash脚本中为一个变量赋一个glob表达式?

当在bash脚本中执行以下两行代码时,"ls"会抱怨文件不存在:

dirs=/content/{dev01,dev02}
ls -l $dirs
Run Code Online (Sandbox Code Playgroud)

当我使用-x选项运行脚本时,它似乎是在单引号内传递变量(这会阻止globbing):

+ dirs=/content/{dev01,dev01}
+ ls -l '/content/{dev01,dev01}'
ls: /content/{dev01,dev01}: No such file or directory
Run Code Online (Sandbox Code Playgroud)

如果我从交互式shell(无引号)执行"ls"命令,它将返回两个目录.

我一直在阅读Bash参考手册(第3.2版)并且看不到任何原因导致文件名通配不发生(我没有将-f传递给shell),或者我可以设置的任何东西以确保全球化发生了.

bash glob

42
推荐指数
4
解决办法
3万
查看次数

PHP的glob()可以以不区分大小写的方式查找文件吗?

我想要一个目录中的所有CSV文件,所以我使用

glob('my/dir/*.CSV')
Run Code Online (Sandbox Code Playgroud)

但是,这不会找到具有小写CSV扩展名的文件.

可以

glob('my/dir/*.{CSV,csv}', GLOB_BRACE);
Run Code Online (Sandbox Code Playgroud)

但有没有办法允许所有混合案例版本?或者这只是一个限制glob()

php glob case-insensitive

40
推荐指数
3
解决办法
2万
查看次数

Python glob但是反对字符串列表而不是文件系统

我希望能够将glob格式中的模式匹配到字符串列表,而不是文件系统中的实际文件.有没有办法做到这一点,或将glob模式轻松转换为正则表达式?

python regex glob python-2.7

40
推荐指数
4
解决办法
8839
查看次数

Bash案例语句中的正则表达式

我正在使用以下脚本,它使用case语句来查找服务器.

    #!/bin/bash
SERVER=$1;
echo $SERVER | egrep "ws-[0-9]+\.host\.com";
case $SERVER in
ws-[0-9]+\.host\.com) echo "Web Server"
;;
db-[0-9]+\.host\.com) echo "DB server"
;;
bk-[0-9]+\.host\.com) echo "Backup server"
;;
*)echo "Unknown server"
;;
esac
Run Code Online (Sandbox Code Playgroud)

但它没有用.正则表达式正在与egrep合作,但不与案例合作.样本O/P.

./test-back.sh ws-23.host.com
ws-23.host.com
Unknown server
Run Code Online (Sandbox Code Playgroud)

任何的想法 ?

regex bash glob case

39
推荐指数
7
解决办法
6万
查看次数

zsh/bash上不区分大小写的Glob

我需要列出名称以'SomeLongString'开头的所有文件.但'SomeLongString'的情况可能会有所不同.怎么样?

我正在使用zsh,但也欢迎使用bash解决方案.

linux bash zsh glob

37
推荐指数
3
解决办法
1万
查看次数

glob-style模式和正则表达式之间有什么区别?

我遇到过只支持glob样式模式并且不存在完整正则表达式支持的情况,例如redis键.我想知道两者之间的区别.另外它让我想知道,与一些软件根本不支持正则表达式的glob-style模式相比,实现正则表达式匹配算法更难?

regex glob

37
推荐指数
2
解决办法
1万
查看次数

依赖于目录下所有文件的Makefile规则(包括在子目录中)

我的Makefile中的一条规则将整个目录(res/)压缩为ZIP文件.显然,当目录下的任何文件res/发生更改时,需要执行此规则.因此,我希望规则将该目录下的所有文件作为先决条件.我该如何实施这条规则?

启用globstar选项的 Bash中,您可以使用通配符模式获取该目录中所有文件的列表res/**/*.但是,如果将其指定为Makefile中的先决条件,它似乎不起作用:

filename.jar: res/**/*
Run Code Online (Sandbox Code Playgroud)

即使在touch输入文件后res/,仍然可以生成报告

make: `filename.jar' is up to date.
Run Code Online (Sandbox Code Playgroud)

很明显它没有认识到这种模式.

如果我将目录本身声明为先决条件:

filename.jar: res
Run Code Online (Sandbox Code Playgroud)

然后在修改文件时不会重新执行Make(我认为make只查看目录本身的修改日期,只有在添加,删除或重命名直接子项时才会更改).

glob makefile wildcard gnu-make

36
推荐指数
1
解决办法
2万
查看次数

使用ls的正则表达式用法

我试图用ER (扩展正则表达式),ls喜欢ls .+\..+.

我正在尝试打印包含扩展名的所有文件(我知道我可以使用ls *.*,但我想尝试使用ER).

当我运行该代码时,我收到此错误:ls: .+..+: No such file or directory.

regex ls glob

36
推荐指数
2
解决办法
10万
查看次数

node.js glob模式,用于排除多个文件

我正在使用npm模块node-glob.

此代码段以递归方式返回当前工作目录中的所有文件.

var glob = require('glob');
glob('**/*', function(err, files) {
    console.log(files);
});
Run Code Online (Sandbox Code Playgroud)

样本输出:

[ 'index.html', 'js', 'js/app.js', 'js/lib.js' ]
Run Code Online (Sandbox Code Playgroud)

我想排除的index.htmlJS/lib.js.我试图用负面模式排除这些文件'!' 但没有运气.有没有办法只通过使用模式来实现这一目标?

glob node.js

36
推荐指数
4
解决办法
6万
查看次数

有没有办法让glob()只有文件?

我知道glob可以查找文件夹中的所有文件或仅查找所有目录:

echo "All files:\n";
$all = glob("/*");
var_dump($all);

echo "Only directories\n";
$dirs = glob("/*", GLOB_ONLYDIR);
var_dump($dirs);
Run Code Online (Sandbox Code Playgroud)

但我没有找到能够有效地在一行中找到文件的东西.

$files = array_diff(glob("/*"), glob("/*", GLOB_ONLYDIR));
Run Code Online (Sandbox Code Playgroud)

运行良好,但两次读取目录(即使有一些优化使第二次浏览更快).

php glob directory-browsing

33
推荐指数
3
解决办法
2万
查看次数