ls * .csv --ignore =“* pattern *”返回包含“pattern”的文件

Modified on: Sat, 30 Jun 2018 12:25:30 +0800

ls --ignore为什么不忽略模式?

看下面的例子:

mkdir books
cd books
touch books_abby.csv
touch books_karen.csv
touch books_david.csv
touch books_tom.csv

这会创建四个文件:

$ ls
books_abby.csv  books_david.csv  books_karen.csv  books_tom.csv

如果你想忽略包含“tom”的所有文件名并列出它们,仍然会返回books_tom.csv

$ ls *.csv --ignore="*tom*"
books_abby.csv  books_david.csv  books_karen.csv  books_tom.csv

预期结果是包含“tom”的文件被省略:

$ ls *.csv --ignore="*tom*"
books_abby.csv  books_david.csv  books_karen.csv
作者:Greg

最佳答案

该标志在ls手册页中描述为

  

不要列出匹配shell PATTERN

隐含

条目

根据定义,只要您明确命名文件或匹配文件的模式,就不再隐含该文件。在您的示例中,books_tom.csv通过匹配模式*.csv显式引用。但是,使用ls --ignore="*tom*",目录中的所有文件都是隐含的,因此books_tom.csv将不再显示。

如果你的shell中有扩展的globbing(使用bash你可以使用shopt -s extglob启用),你可以通过制作一个排除'tom'的模式来实现你想要的。例如ls books_!(tom).csv将显示books_abby.csv但不显示books_tom.csv

(当然,你可以使用其他工具,比如find,pipe to grep -v等......我只是解释如何用ls仅限。)

作者:,B Layer

相关问答

添加新评论