我有一个文件夹,其中有很多子文件夹。
根文件夹名称为 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]
之一结尾的名称。要匹配以 开头的名称,请使用。要匹配以 结尾的名称,请使用..
c
s
v
a_
-name 'a_*'
.csv
-name '*.csv'
find ../ -name 'a_*' -a -name '*.csv'
或等效地find ../ -name 'a_*.csv'
匹配名称以 . 开头a_
和结尾的文件.csv
。这不会过滤到达文件所遍历的目录。
如果文件位于父目录的子目录中(例如../a_foo/wibble.csv
),则不需要find
:该find
命令仅对递归搜索目录树有用。您可以使用echo
或ls
:
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'