我正在寻找一个通配符字符串匹配API(不是正则表达式匹配).我不能使用除Win32 API之外的任何东西.
Perl成语的C++方式是什么:
my @files = glob("file*.txt");
foreach my $file (@files) {
# process $file
}
Run Code Online (Sandbox Code Playgroud) 假设我有一个包含以下jpeg文件的文件夹:
adfjhu.jpg Afgjo.jpg
Bdfji.jpg bkdfjhru.jpg
Cdfgj.jpg cfgir.jpg
Ddfgjr.jpg dfgjrr.jpg
Run Code Online (Sandbox Code Playgroud)
如何删除或列出以大写字母开头的文件?
这可以用组合来解决find,grep并xargs.
但是在bash中可以使用普通的文件循环/模式匹配吗?
下面的cmd不起作用,因为(据我所知)LANG设置为en_US
和整理顺序.
$ ls [A-Z]*.jpg
Afgjo.jpg Bdfji.jpg bkdfjhru.jpg Cdfgj.jpg cfgir.jpg Ddfgjr.jpg dfgjrr.jpg
Run Code Online (Sandbox Code Playgroud)
这种作品
$ ls +(A|B|C|D)*.jpg
Afgjo.jpg Bdfji.jpg Cdfgj.jpg Ddfgjr.jpg
Run Code Online (Sandbox Code Playgroud)
但我不想为所有字符AZ做这个通用解决方案!
这可能吗?
欢呼// Fredrik
如何从命令行读取Bash中的glob?我尝试了这个,它只获取了glob中的第一个文件:
#!/bin/bash
shopt -s nullglob
FILES=$1
for f in $FILES
do
echo "Processing $f file..."
echo $f
done
Run Code Online (Sandbox Code Playgroud)
假设我的脚本是script.sh.我想称之为sh script.sh /home/hss/* 4 gz
(在哪里/home/hss/*,4并且gz是命令行参数).当我尝试上面的脚本时,它只读取第一个文件.有任何想法吗?
为了在Windows中列出pathes,我写了下面的Perl函数(在StrawBerry运行时环境下执行).
sub listpath
{
my $path = shift;
my @list = glob "$path/*";
#my @list = <$path/*>;
my @pathes = grep { -d and $_ ne "." and $_ ne ".." } @list;
}
Run Code Online (Sandbox Code Playgroud)
但它无法正确解析包含空间的目录,例如:
当我发出以下代码时:listpath("e:/ test/test1/test11/test111/test1111/test11111 - Copy");
该函数返回一个包含两个元素的数组:
1:e:/ test/test1/test11/test111/test1111/test11111 2: -
我想知道glob是否可以解析空间目录.非常感谢.
有没有办法让Eclipse在运行配置参数中扩展通配符?我的类可以处理传递给的命令行参数main(String[] args).从普通shell(我的系统上的bash),它很简单:
$java MyClass file*.txt
Run Code Online (Sandbox Code Playgroud)
这将运行我的类,其中包含工作目录中的所有文件,这些文件以命令行参数的形式提供file并以结尾的形式.txt提供.
我想在eclipse中有相同的行为,但是当我进入file*.txt运行配置编辑器并运行程序时,通配符不会扩展.而不是文件列表,唯一识别的arg是文字字符串file*.txt.
这个线程让我相信它是可能的或者曾经是可能的(至少在Windows上 - 我运行的是Mac OS X 10.6.8),但那些人正在遇到相反的问题,即通配符被扩展,即使这种行为不是通缉.
在尝试解决这个问题时,我尝试使用不同的环境变量(即$ {string_prompt},更改工作目录,查看Eclipse首选项和文档,并搜索相关的短语,但没有任何工作.任何建议或相关链接信息将不胜感激.
我需要列出当前目录(.)中的所有文件(包括所有子目录),并排除一些文件,如.gitignore如何工作(http://git-scm.com/docs/gitignore)
使用fnmatch(https://docs.python.org/2/library/fnmatch.html),我将能够使用模式"过滤"文件
ignore_files = ['*.jpg', 'foo/', 'bar/hello*']
matches = []
for root, dirnames, filenames in os.walk('.'):
for filename in fnmatch.filter(filenames, '*'):
matches.append(os.path.join(root, filename))
Run Code Online (Sandbox Code Playgroud)
如何"过滤"并获取与"ignore_files"的一个或多个元素不匹配的所有文件?
谢谢!
当我尝试编译我的grunt文件并构建到我的dist文件夹中进行部署时,我在控制台中收到以下错误:
Running "rev:dist" (rev) task
dist/public/app/app.js >> 63decaf3.app.js
dist/public/app/vendor.js >> a09756ab.vendor.js
dist/public/app/app.css >> d2017fc8.app.css
Warning: Unable to read "dist/public/bower_components/animate.css" file (Error code: EISDIR).
Run Code Online (Sandbox Code Playgroud)
原因是我有一个名为animate.css的安装了bower组件.该库是安装在我当然bower_components文件夹,但匹配的字符串我在咕噜文件只查找文件具有的扩展.js,.css,等等.这是我的匹配字符串:
// Renames files for browser caching purposes
rev: {
dist: {
files: {
src: [
'<%= yeoman.dist %>/public/{,*/}*.js',
'<%= yeoman.dist %>/public/{,*/}*.css', // Offending line
'<%= yeoman.dist %>/public/assets/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
'<%= yeoman.dist %>/public/assets/fonts/*'
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是目录结构:
bower_components
-> ...
-> angular-ui-router
-> animate.css // Folder with the …Run Code Online (Sandbox Code Playgroud) 我刚看过这个:
答案表明文件为glob,例如:
file(GLOB "*.h" "*.cpp")
Run Code Online (Sandbox Code Playgroud)
现在,如果我希望我的目标依赖于特定文件夹下某种类型的所有文件 - 可能在多个子文件夹中,该怎么办?我试过用
execute_process(COMMAND find src/baz/ -name "*.cpp" OUTPUT_VARIABLE BAR)
Run Code Online (Sandbox Code Playgroud)
然后
add_executable(foo ${BAR}
Run Code Online (Sandbox Code Playgroud)
但这给了我错误:
找不到源文件:
src/baz/some/file/here
src/baz/some/other_file/here
src/baz/some/other_file/here2
Run Code Online (Sandbox Code Playgroud)
(是的,有那个间距.)
我在这做错了什么?
我想比较目录与Meld,但只有特定的文件模式.例如,只有*.c;*.cc;*.icc;*.h文件.
Meld可以使用文件过滤器,但我只能使用它们来排除过滤特定的文件模式.我想这种方法对我没用.
可以应用包含过滤器吗?
我尝试了"双重否定"的概念:排除"除了"之外的所有*.c;*.cc;*.icc;*.h内容,实际上只包括那些模式.
我尝试使用文件过滤器,它可以很好地ls -d -- <my_filter>在命令行中列出"除了...之外的所有内容" (请参阅此内容).我认为这是任何过滤器在Meld中工作的必要条件(但不是充分条件).这些都不起作用:
!(*.c|*.h|*.cc)!(*@(.c|.h|.cc))!(*.@(c|h|cc))注意:我不是要使用任何类型的文本过滤器,因为我现在不关心文件的内容,而只关心文件名.
注意:我有bash和
$ shopt extglob
extglob on
Run Code Online (Sandbox Code Playgroud)