在与模式匹配的目录中查找扩展名为 .csv 的文件

在与模式匹配的目录中查找扩展名为 .csv 的文件

我有一个文件夹,其中有很多子文件夹。

根文件夹名称为 allCSV,子文件夹名称如下a_date(s), b_date(s), c_date(s) ...

我想要一个位于 a_date(s) 中并以.csv.

我尝试过:

find ../ -name '[a_]*' -a -name '*[.csv]'

但它显示所有以以下结尾的文件.csv

答案1

该模式[a_]*匹配以字符a或开头的名称_。该模式匹配以字符、或*[.csv]之一结尾的名称。要匹配以 开头的名称,请使用。要匹配以 结尾的名称,请使用..csva_-name 'a_*'.csv-name '*.csv'

find ../ -name 'a_*' -a -name '*.csv'或等效地find ../ -name 'a_*.csv'匹配名称以 . 开头a_和结尾的文件.csv。这不会过滤到达文件所遍历的目录。

如果文件位于父目录的子目录中(例如../a_foo/wibble.csv),则不需要find:该find命令仅对递归搜索目录树有用。您可以使用echols

ls ../a_*/*.csv

如果文件可以位于a_*目录下的子目录中(例如../a_foo/wibble.csv../a_foo/bar/wibble.csv但不是../qux/a_foo/wibble.csv),则调用find并告诉它搜索a_*目录。

find ../a_* -name '*.csv'

或者,find您可以使用**用于在子目录中递归搜索的通配符。在 ksh93 中,您需要set -o globstar首先启用此模式。在 bash 中,您需要shopt -s globstar首先启用此模式。在 zsh 中,默认启用此模式。其他 shell(例如 plain sh)没有**.

ls ../a_*/**/*.csv

如果a_*目录本身可以位于父目录下方的任意深度,则可以使用find -path**

find .. -path '*/a_*/*.csv'
ls ../**/a_*/**/*.csv

答案2

有很多方法可以做到这一点。如果您只想列出文件,您可以使用ls

ls a_date\(s\)/*csv

或者,与find

find .. -path '*a_date*/*csv' 
find ../allCSVs/a_date\(s\)/ -name '*csv'

答案3

你可以使用雷科尔这可以帮助您搜索任何文档类型,并将搜索限制到特定文件夹,如下所示。

简单搜索 简单搜索

高级搜索(将搜索限制到特定文件夹) 限制搜索

相关内容