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
该模式[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
Run Code Online (Sandbox Code Playgroud)
如果文件可以在目录下的子目录中a_*
(例如../a_foo/wibble.csv
or ../a_foo/bar/wibble.csv
but 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)
归档时间: |
|
查看次数: |
19647 次 |
最近记录: |