标签: glob

仅在特定目录中忽略部分文件名

我想忽略:

settings/local_*.py
apps/settings/local_*.py
path_to/settings/local_*.py
Run Code Online (Sandbox Code Playgroud)

但我不想忽视:

local_*.py
something/else/local_*.py
Run Code Online (Sandbox Code Playgroud)

我也不想忽视:

settings/non_local_*.py
...
Run Code Online (Sandbox Code Playgroud)

这超出了 gitignore 的范围吗?

当然,我正在寻找一种通用的解决方案,无论settings目录位于何处(在存储库内),该解决方案都可以工作。

git glob gitignore

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

在 bash for 循环上扩展 glob 时忽略空匹配

我正在编写一个脚本来将文件(例如Dropbox Camera Uploads )移动到以年份命名的文件夹,如下所示:

#!/bin/bash
#
# Separate (camera) images on directory
# to year named folders.
#
# All files must be named as "yyyy-mm-dd HH:MM:SS.ext"
#
for img in *.{jpg,jpeg,png}; do
  year=${img:0:4}
  [ -d "$year" ] || mkdir "$year"
  mv -iv "$img" "$year/"
done
Run Code Online (Sandbox Code Playgroud)

该脚本对于匹配文件按预期工作,但是当没有任何具有某种扩展名的文件时,将扩展为*.ex(前两个扩展字符)。然后它创建空目录,如下所示:

'*.jp'
'*.jp'
'*.pn'
Run Code Online (Sandbox Code Playgroud)

我怎样才能忽略不匹配的文件?

bash glob

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

使用 gulp 将文件复制到同一目录中的新名称

我正在尝试使用 gulp 将一个文件复制到具有不同名称的同一目录 - 具有不同名称的文件已经存在。在 Unix 中这只是简单的cp ./data/file.json.bak ./data/file.jsongulp 似乎更棘手(我在 Windows 系统上)。

我试过了:

gulp.task('restore-json',function(){ return gulp.src('./data/file.json.bak') .pipe(gulp.dest('./data/file.json',{overwrite:true})); });

如果该文件存在,我会收到EEXIST错误。如果没有,它将创建file.json为目录。

我假设这个问题是因为 gulp 使用globbing并有效地将srcdest视为路径。你知道我可以做到这一点的最有效的方法吗?我想解决方法是将文件复制到 tmp 目录,然后使用 glob 通配符重命名和复制,但这是正确的方法吗?

glob gulp

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

打开并解析文件夹中的多个 XML 文件

下面的 Python 代码适用于一个 XML。当我尝试打开并解析多个 XML 文件时,问题就出现了,这些文件具有相似的结构并保存在文件夹中(第 4 行 -> data = open('[0-9].xml',"rb")。我我正在尝试正则表达式,但我不确定这是否也适用于命名文档。

所有文档的名称为“11111.xml、22222.xml、33333.xml ...”等。

import xml.etree.ElementTree as ET
import re

data = open ('[0-9].xml',"rb")
tree = ET.parse (data)
lst_jugador = tree.findall('data_panel/players/player')
for jugador in lst_jugador:
    print (jugador.find('name').text, jugador.get("id"))
Run Code Online (Sandbox Code Playgroud)

python glob

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

CMake 不带目录路径的文件的 glob 列表

如果您在 CMake 中使用全局文件列表file(GLOB..),则所有文件都会列出并附加其完整路径。

如何在 CMake 中 glob 一组文件,仅保存文件名?

我阅读了官方手册,在这里我发现了这一点:

 file(GLOB <variable>
 [LIST_DIRECTORIES true|false] [RELATIVE <path>]
 [<globbing-expressions>...])
Run Code Online (Sandbox Code Playgroud)

 By default GLOB lists directories - directories are omitted in result 
 if LIST_DIRECTORIES is set to false.
Run Code Online (Sandbox Code Playgroud)

我尝试了这些解决方案,但没有一个有效:

file(GLOB_RECURSE src_files LIST_DIRECTORIES false ${SRC})

file(GLOB_RECURSE src_files LIST_DIRECTORIES=false ${SRC})

file(GLOB_RECURSE src_files LIST_DIRECTORIES(false) ${SRC})

set(LIST_DIRECTORIES false)
file(GLOB_RECURSE src_files ${SRC})
Run Code Online (Sandbox Code Playgroud)

我的输出始终是附加完整路径的文件列表。我知道我可以使用 RELATIVE 来相应地设置路径,但如果可以的话我宁愿避免它。

c++ glob cmake

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

测试一个 glob 在 bash 中是否只有一个匹配并获取它

问题“测试 glob 在 bash 中是否有任何匹配项”,它的答案非常好。

但是,我想知道如何测试 glob 在 bash 中是否只有一个匹配项以及是否存在分配给一个变量。

我该怎么做?

bash glob

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

BASH - OPTARG 中的 getopts 正则表达式

我需要使用 getopts 从参数中获取正则表达式

./function -i "d*"
Run Code Online (Sandbox Code Playgroud)
while getopts 'i:n' opt; do
  # check -i and -n arg
    case "$opt" in
      i)
        i=true
        pattern=$OPTARG;;
    esac
  done
echo $pattern
Run Code Online (Sandbox Code Playgroud)

输出是darProVas dirgraf-copy dirgraf-my:以 . 开头的文件列表d。我需要这个输出:d*.

bash quotes glob getopts

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

在 bash 中使用文件通配符执行 echo 命令

我想做这样的事情:echo "foo" > bar/**/buzz但这无效

基本上,我想将字符串回显到 bar 中每个目录中的文件中。

我确信有一个简单的方法可以做到这一点,哈哈。

bash glob echo

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

模式在交互式 shell 中有效,但在脚本中无效

在我的交互式 shell 中,我可以将模式存储在变量中

$ targets="?(pcm52|pcm61)"
$ ls -l config/devdesc.$targets
-rw-r--r-- 1 kfa kfa 113 Dec 16 13:43 config/devdesc.pcm52
-rw-r--r-- 1 kfa kfa  14 Dec 16 13:44 config/devdesc.pcm61
Run Code Online (Sandbox Code Playgroud)

但是如果我创建一个shell脚本

targets="?(pcm52|pcm61)"
ls -l config/devdesc.$targets
Run Code Online (Sandbox Code Playgroud)

运行它时出现此错误

$ bash -x /tmp/e.sh
+ targets='?(pcm52|pcm61)'
+ ls -l 'config/devdesc.?(pcm52|pcm61)'
ls: cannot access 'config/devdesc.?(pcm52|pcm61)': No such file or directory
Run Code Online (Sandbox Code Playgroud)

为什么放入脚本时会失败?

bash glob extglob

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

在perl中,有一种简洁的方法来组合glob和printf吗?

我希望@list包含$ root_dir中匹配*YYYYMMDD*的所有文件名,其中YYYYMMDD是25小时前.

我试试......

my ($y, $m, $d) = (localtime(time - 25 * 60 * 60))[5,4,3]; 
my $pattern = sprintf('*%4d%02d%02d*',$y+1900,$m+1,$d);
print "The pattern is $pattern\n"; 
my @files = <$pattern>;
foreach (@files) {
    print "$_\n";
}
Run Code Online (Sandbox Code Playgroud)

...但是我没有获取文件列表,而是在未打开的文件句柄上获得readline().

我知道<>运算符可以解释变量,因此<$ y $ m $ d>将在一年中最后三个月的三分之二天内工作,因为那些将是有两位数的月和日,但是不稳健.

我必须写...

$m = sprintf('%02d',$m+1);  
$d = sprintf('%02d',$d+1);
my @files = <*$y$m$d*>;
Run Code Online (Sandbox Code Playgroud)

......还是有更简洁的东西?就像是 ...

# invalid code unless you want to produce the string "readline() on unopened filehandle" for some reason
my @files = …
Run Code Online (Sandbox Code Playgroud)

perl printf glob

0
推荐指数
1
解决办法
324
查看次数

标签 统计

glob ×10

bash ×5

c++ ×1

cmake ×1

echo ×1

extglob ×1

getopts ×1

git ×1

gitignore ×1

gulp ×1

perl ×1

printf ×1

python ×1

quotes ×1