我需要在文件夹中找到与此字符串匹配的文件:
说我有:
/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'的行,此时我得到vim-runtime太明显因为-name'vim *'
我需要使用glob模式。
这是一切的格式:
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'
找到一个精确的包答案 0 :(得分: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
答案 1 :(得分:1)
如果我理解正确你想要找到vim- .gz而不是vim-runtime .gz。如果这是正确的请让问题更清楚。答案就是:
正则表达式是错误的。 finds -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'
答案 2 :(得分:0)
glob
import pandas as pd
import glob
pattern
pattern = 'uber*'
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']