如何选择目录中的文件以bash中的显式名称开头?

时间:2015-08-16 18:54:28

标签: bash shell

我有一个shell脚本,如下所示

dcacheDirIn="/mypath/"
for files in `ls $dcacheDirIn | grep txt`
do
.....
done

我在这个目录中有一些.txt文件,其中一些以Data2012 * .txt和一些Data2011 * .txt开头。如何选择“Data2012”文件?

编辑:我的坏我混淆了我的python文件。这肯定是shell脚本。

5 个答案:

答案 0 :(得分:1)

在Python中,您可以使用glob库,如下所示:

import glob

for file2012 in glob.glob("/mypath/Data2012*.txt"):
    print file2012

使用Python 2.7进行测试

答案 1 :(得分:1)

python glob库具有该功能,它还支持正则表达式。所以,例如,你会这样做:

for file in glob.glob('*2012.txt'):
    print file

这将打印匹配该表达式的文件(假设您从同一目录运行它)。它有一个堆负载更多的功能,你应该深入了解。

编辑:修复缩进,需要更多字符..

答案 2 :(得分:1)

您可以使用grep直接实现此目的:

dcacheDirIn="/mypath/"
for files in `ls $dcacheDirIn | grep -E 'Data2012.*\.txt'`
do
.....
done

grep使用正则表达式过滤ls的输出。我为grep提供的正则表达式将按照您想要的格式Data2012*.txt过滤掉文件。

答案 3 :(得分:1)

你可以试试这个

dcacheDirIn="/mypath/"
for files in `ls $dcacheDirIn | grep Data2012`
do
echo $files
done

要避免使用该名称的目录,请尝试

ls $dcacheDirIn -p | grep -v / | grep Data2012

答案 4 :(得分:1)

在bash中,通配符将为你做ls的工作。 只需使用

dcacheDirIn="/mypath"
for file in $dcacheDirIn/Data2012*txt
do
   echo "File $file"
done