用开始和结束的模式列出文件


9

我想列出目录中所有以“ abc”开头并以“ .zip”结尾的文件

我正在尝试使用ls

该目录包含许多以abc<date>和开头的zip文件xvz<date>。我只想获取清单abc<date>.zip


ls -1 | grep "abc$(your_date).zip"
Stan Strum,

Answers:


15

ls不对文件名进行模式匹配。它仅列出目录的内容以及作为参数给出的文件。

另一方面,您的外壳程序具有称为globlob文件名生成的功能,该功能可将模式扩展为与该模式匹配的文件列表。

这里的glob模式将是abc*.zip*是代表任意数量字符的通配符)。

您可以将其传递给您喜欢的任何命令,例如printf用于打印的命令:

printf '%s\n' abc*.zip

您还可以传递它以ls -l显示那些文件的属性:

ls -ld abc*.zip

(我们需要,-d因为如果其中任何文件的类型为directoryls则将列出其内容)。

或要unzip提取它们(如果一次unzip只能提取多个文件)。不幸的是,事实并非如此,因此您需要使用xargs -n1for循环:

printf '%s\0' abc*.zip | xargs -r0n1 unzip

要么:

for file in abc*.zip; do unzip "$file"; done

但是实际上,unzip它更像是MS-DOS命令的端口,unzip本身会将其参数视为glob。换句话说,unzip 'abc*.zip'不会解压缩名为abc*.zip(在Unix上是完全有效的文件名,而不是在Microsoft操作系统上的完全有效文件名)的文件,而是解压缩与abc*.zip模式匹配的文件,因此您实际上需要:

 unzip 'abc*.zip'

(实际上xargsfor上面的and 方法将是错误的,因为如果有一个名为的文件abc*.zipunzip则将其视为一种模式!请参阅bsdtar以更统一的方式提取zip档案)


对于不区分大小写的匹配,您可以方便地使用[aA][bB][cC]*.[zZ][iI][pP]。一些外壳程序具有扩展的全局操作符,用于不区分大小写的匹配:

  • zsh

    setopt extendedglob
    ls -ld (#i)abc*.zip
    

    要么:

    ls -ld ((#i)abc)*.zip
    

    如果您只希望abc零件不区分大小写。

  • ksh93

    ls -ld ~(i)abc*.zip
    

    要么:

    ls -ld ~(i:abc)*.zip
    
  • bash

    shopt -s nocaseglob
    ls -ld abc*.zip
    

    (除了使用可移植语法之外,没有办法只让部分glob区分大小写)。

  • yash

    set +o case-glob
    ls -ld abc*.zip
    

    bash上述相同。


9
ls abc*.zip

但是,如果文件太多,此操作将失败(shell扩展在可以扩展到多少个参数方面受到限制)。

find . -name "abc*.zip"

这可能是最通用的。引号必须在那里。在某些find实现中,您还可以使用-iname而不是-name不区分大小写的搜索(aBc<date>.ZIP也可以匹配)。

ls | grep -x "abc.*\.zip"

注意.*和,\.因为过滤器grep使用的是正则表达式,它与shell用于扩展的通配符表示法不同。使用grep -i不区分大小写的搜索。


1
请注意,该限制不是外壳限制。这是execve()系统调用中的内核限制。
斯特凡Chazelas

应该注意的是,它们find也会在子目录中查找这些文件。如果您的支持类似于GNU或BSD,或者如果您的支持类似于某些BSD,请使用find . ! -name . -prune -name 'abc*.zip' -print或以将其限制为当前目录。find . -maxdepth 1 -name 'abc*.zip'find-maxdepthfind . -depth 1 -name 'abc*.zip'find-depth <n>
斯特凡Chazelas

$ ls ../*.a为我工作(在父目录中列出档案)。
丹尼尔(Daniel)

0

尝试使用ls abc*.zip缩小结果的范围,使其符合您的条件,以abc的起始字符串和.zip的结尾字符串为准。


-1

您必须ls在示例中指定要搜索的目录

ls -la ~/file*.* 
ls -la ./file*.*

它对我有用,但显然不支持按模式搜索


1
这没有解决问题。文件应以开头abc和结尾.zip
杰夫·谢勒
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.