有没有办法处理invers bash v4 shell扩展,即.处理所有文件不像通配符?我需要在这种情况下rm不是格式的所有文件,'Folder-???'并且想知道是否有更短的(即内置)方式然后做一个
for file in *
do
[[ $i =~ \Folder-...\ ]] && rm '$i'
done
Run Code Online (Sandbox Code Playgroud)
环.(这个例子不起作用,顺便说一下......)
刚出来的bash学习好奇心......
经过一些测试/脚本/使用PHP 5.3 PHAR档案后,我发现了一些问题.
glob的
PHAR不适用于glob.既不作为包装器(http://www.php.net/manual/en/phar.using.stream.php#104320)也不作为函数调用.
在我的测试项目中,我不得不迭代PHAR中的文件,并通过全局等效的正则表达式过滤结果.
imagettfbbox
我不知道为什么,但imagettfbbox也不理解PHAR流包装器.
这里最简单的解决方案是通过copy()提取文件.(PHAR :: extractTo返回异常,没有堆栈跟踪或行号.)
还有其他惊喜,我应该期待吗?还有其他已知问题吗?它们是否随处可见?
我只是想显示我的图像的名称,没有路径(../uploadedImages/)
<?php $images = glob("../uploadedImages/[kK]*.{jpg,png,gif,bmp}",GLOB_BRACE);
foreach($images as $image) {echo "$image<br>"} ?>
Run Code Online (Sandbox Code Playgroud) 有没有办法可靠地使用存储在变量中的任意globbing模式?如果模式包含空格和元字符,我会遇到困难.这就是我的意思.如果我有一个存储在没有空格的变量中的模式,那么事情似乎工作正常:
<prompt> touch aa.{1,2,3} "a b".{1,2,3}
<prompt> p="aa.?"
<prompt> for f in ${p} ; do echo "|$f|" ; done
|aa.1|
|aa.2|
|aa.3|
<prompt> declare -a A=($p) ; for f in "${A[@]}" ; do echo "|$f|" ; done
|aa.1|
|aa.2|
|aa.3|
Run Code Online (Sandbox Code Playgroud)
但是,只要我在模式中抛出一个空格,事情就变得站不住脚了:
<prompt> p="a b.?"
<prompt> for f in ${p} ; do echo "|$f|" ; done
|a|
|b.?|
<prompt> declare -a A=($p) ; for f in "${A[@]}" ; do echo "|$f|" ; done
|a|
|b.?|
<prompt> for f in "${p}" ; …Run Code Online (Sandbox Code Playgroud) 从Oathy考试的"Kathy Sierra Bert Bates"一书中我发现了以下代码
public class FileTest {
public static void matches(Path path, String glob){
PathMatcher matcher = FileSystems.getDefault().getPathMatcher(glob);
System.out.println(matcher.matches(path));
}
public static void main(String[] args) throws IOException {
Path path = Paths.get("/com/java/One.java");
matches(path, "glob:*.java");
matches(path, "glob:**/*.java");
matches(path, "glob:*");
matches(path, "glob:**");
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
false
true
false
true
Run Code Online (Sandbox Code Playgroud)
我无法清楚地理解输出.有人会解释我吗?让我知道我的例子是什么是跨越目录边界.谢谢洛基
我需要检查图像文件夹以添加一些产品图像.我的产品列表数组有SKU,如a48be25, A48be29, A48BE30我的图像文件夹中有图像a48BE25_1.jpg, a48bE29_2.JPG, A48BE30_1.jpg等等.
如您所见,图像和SKU是混合的.我需要以某种方式将SKU与文件名匹配.如果我使用glob("my/dir/{$SKU}*.jpg"),根据我的知识,它将不适用于区分大小写的操作系统.有没有办法强制glob以不区分大小写的方式搜索?
编辑:我不认为这线程的副本这一块.我这样说是因为在我的情况下我可以有很多可以混合使用的SKU.在提到的帖子中,OP只CSV在混合情况下使用了这个词,所以glob('my/dir/*.[cC][sS][vV]')在那里可以很好地工作.
执行错误的详细信息:
#node app.jsthrow new TypeError('callback provided to sync glob')
^
TypeError: callback provided to sync glob
at glob (C:\Users\z\Documents\node_modules\glob\glob.js:70:13)
at Object.module.exports.getGlobbedFiles (C:\Users\z\Documents\Server\Config\config.js:31:4)
at Object.<anonymous> (C:\Users\z\Documents\Server\app.js:102:10)
Run Code Online (Sandbox Code Playgroud)
我正在使用glob 5.0.14来启动meanjs app.
这是我的config.js:
var _ = require('lodash'),
glob = require('glob');
module.exports.getGlobbedFiles = function(globPatterns, removeRoot) {
var _this = this;
var urlRegex = new RegExp('^(?:[a-z]+:)?\/\/', 'i');
var output = [];
if (_.isArray(globPatterns)) {
globPatterns.forEach(function(globPattern) {
output = _.union(output, _this.getGlobbedFiles(globPattern, removeRoot));
});
} else if (_.isString(globPatterns)) {
if (urlRegex.test(globPatterns)) {
output.push(globPatterns);
} else {
31=> …Run Code Online (Sandbox Code Playgroud) 我有一个目录,其中包含以下文件:
apple1.json.gz
apple2.json.gz
banana1.json.gz
melon1.json.gz
melon2.json.gz
Run Code Online (Sandbox Code Playgroud)
我希望能够找到所有的apple,banana和melon文件类型.
从这个SO答案我知道我可以通过文件类型找到:
import glob, os
os.chdir("/mydir")
for file in glob.glob("*.json.gz"):
print(file)
Run Code Online (Sandbox Code Playgroud)
但是,就我而言,我无法通过文件名或文件类型进行匹配.而是一个部分文件名匹配(所有apple的等等)
在这个SO问题中,提出了这个解决方案:
[in] for file in glob.glob('/path/apple*.json.gz'):
print file
Run Code Online (Sandbox Code Playgroud)
但是,这会返回零
[out]
0
Run Code Online (Sandbox Code Playgroud) 我需要通过递归搜索生成包含特定字符串的路径的文件列表.我这样做当前是这样的:
for i in iglob(starting_directory+'/**/*', recursive=True):
if filemask in i.split('\\')[-1]: # ignore directories that contain the filemask
filelist.append(i)
Run Code Online (Sandbox Code Playgroud)
这样可行,但是当抓取一个大型目录树时,它的速度非常慢(约10分钟).我们在Windows上,因此不能选择对unix find命令进行外部调用.我的理解是glob比os.walk更快.
有更快的方法吗?
会Path('.').glob('*.ext')产生一致的结果排序(假设被通配的文件不会改变)?
似乎全局排序基于文件系统顺序(至少对于旧glob包而言)。是否会通过将文件添加到目录(不会包含在 glob 中)来更改pathlib的glob顺序?即使没有向特定目录添加任何内容(例如,当系统上的其他地方进行其他大文件更改时),文件系统是否会更改此顺序?在几天的过程中?或者在所有这些情况下排序会保持一致吗?
只是为了澄清,我不能简单地转换为列表并排序,因为有太多的文件路径无法同时放入内存。我希望每次都能达到相同的顺序,因为我将进行一些 ML 培训,并希望将每个第 n 个文件留作验证数据。此培训将需要几天时间,这就是为什么我很想知道订单在文件系统上是否长时间保持稳定。