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

VP7*_*VP7 3 shell find shell-script filenames wildcards

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

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

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

我试过:

find ../ -name '[a_]*' -a -name '*[.csv]'
Run Code Online (Sandbox Code Playgroud)

但它显示了所有以 .csv

Gil*_*il' 6

该模式[a_]*匹配以字符a或开头的名称_。该模式*[.csv]匹配以字符.cs或之一结尾的名称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命令仅对递归搜索目录树有用。您可以使用echols

ls ../a_*/*.csv
Run Code Online (Sandbox Code Playgroud)

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

find ../a_* -name '*.csv'
Run Code Online (Sandbox Code Playgroud)

或者,find您可以使用**通配符在子目录中递归搜索,而不是使用。在 ksh93 中,您需要先启用此模式set -o globstar。在 bash 中,您需要先启用此模式shopt -s globstar。在 zsh 中,默认情况下启用此模式。其他外壳,如普通 sh 没有**.

ls ../a_*/**/*.csv
Run Code Online (Sandbox Code Playgroud)

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

find .. -path '*/a_*/*.csv'
ls ../**/a_*/**/*.csv
Run Code Online (Sandbox Code Playgroud)