1

我需要在文件夹中找到与这样的字符串匹配的文件:

说我有:

/var/cache/pacman/pkg/vim-runtime-7.3.754-1-x86_64.pkg.tar.xz
/var/cache/pacman/pkg/vim-7.3.918-2-x86_64.pkg.tar.xz
/var/cache/pacman/pkg/vim-7.44.918-2-x86_64.pkg.tar.xz

我希望能够运行类似的东西

find /var/cache/pacman/pkg -name 'vim*'

而且它应该只返回具有'vim'的行,因为 -name 'vim*' 我现在得到 vim-runtime 太明显了

我需要使用全局模式。

这是所有内容的格式:

cachedir               package     packageVersion packageRelease architecture extesnion
/var/cache/pacman/pkg/ vim-runtime 7.3.754        1              x86_64       pkg.tar.xz
/var/cache/pacman/pkg/ vim         7.3.918        2              x86_64       pkg.tar.xz

所以基本上我需要使用命令'find'找到一个确切的包

4

3 回答 3

2

变成/var/cache/pacman/pkg/vim-runtime-7.3.754-1-x86_64.pkg.tar.xz_

/var/cache/pacman/pkg/ vim-runtime 7.3.754        1              x86_64       pkg.tar.xz

您可以使用:

files=(
    /var/cache/pacman/pkg/vim-runtime-7.3.754-1-x86_64.pkg.tar.xz 
    /var/cache/pacman/pkg/vim-7.3.918-2-x86_64.pkg.tar.xz
    /var/cache/pacman/pkg/vim-7.44.918-2-x86_64.pkg.tar.xz
)
for f in "${files[@]}"; do
    if [[ $f =~ ^(.*/)(.*)-([^-]+)-([0-9])-([^.]+)\.(.*) ]]; then 
        for i in "${!BASH_REMATCH[@]}"; do 
            echo "$i => ${BASH_REMATCH[$i]}"
        done
    fi      
done

这输出

0 => /var/cache/pacman/pkg/vim-runtime-7.3.754-1-x86_64.pkg.tar.xz
1 => /var/cache/pacman/pkg/
2 => vim-runtime
3 => 7.3.754
4 => 1
5 => x86_64
6 => pkg.tar.xz
0 => /var/cache/pacman/pkg/vim-7.3.918-2-x86_64.pkg.tar.xz
1 => /var/cache/pacman/pkg/
2 => vim
3 => 7.3.918
4 => 2
5 => x86_64
6 => pkg.tar.xz
0 => /var/cache/pacman/pkg/vim-7.44.918-2-x86_64.pkg.tar.xz
1 => /var/cache/pacman/pkg/
2 => vim
3 => 7.44.918
4 => 2
5 => x86_64
6 => pkg.tar.xz

你可能想要for f in /var/cache/pacman/pkg/*; do

于 2013-06-21T10:18:06.150 回答
1

如果我理解正确,您想找到vim-.gz 而不是 vim-runtime .gz。如果那是正确的,请让问题更清楚。那么答案将是:

正则表达式是错误的轨道。发现 -name 选项不使用正则表达式。它使用文件 glob 模式,就像您在命令行上指定的那样。尝试

find /var/cache/pacman/pkg -name 'vim-[0-9]*.gz'

编辑:vim-[0-9]*不好,因为它会找到包名称中有数字的包。但是这个呢?

find /var/cache/pacman/pkg -name 'vim-*-*-*.pkg.tar.xz'

编辑:对不起,我的错。不起作用,因为*匹配runtime-7.3.754。也许正则表达式的想法比我想象的要好(不知道 -regex 选项)。这个怎么样?

find /var/cache/pacman/pkg -regex '.*/vim-[^-]*-[^-]*-[^-]*.pkg.tar.xz'
于 2013-06-21T08:49:44.493 回答
0

使用模块glob

导入必要的模块

    import pandas as pd
    import glob

写出图案:pattern

    pattern = 'uber*'

保存所有文件匹配:csv_files

    uber_files = glob.glob(pattern)

打印文件名

    print(uber_files)

输出:

['uber-raw-data-2014_05.csv', 'uber-raw-data-2014_04.csv', 'uber-raw-data-2014_06.csv']
于 2019-03-31T09:12:16.850 回答