linux bash循环,用于匹配模式的目录和子目录中的所有文件[重复]

nhaq1z21  于 2023-04-11  发布在  Linux
关注(0)|答案(1)|浏览(131)

此问题已在此处有答案

Does double asterisk include the current directory?(1个答案)
2小时前关闭
我想循环遍历与模式匹配的文件。它们可以在当前目录或子目录中。
我试过:

for file in **/$_pat*; do

但它只找到子目录中的文件。我也把它放在bashrc中。它适用于ls**/blah*,但在我的bash文件for循环中不起作用

shopt -s globstar
jdgnovmf

jdgnovmf1#

使用find

find "$_path" -type f -iname "*your_pattern*"

其中:
-iname =模式的不区分大小写匹配
-type f =仅搜索常规文件,忽略目录或链接
要在循环中使用它:

find "$_path" -type f -iname "*your_pattern*"|while read file
do
echo "$file"
done

如果结果中有空格,for循环将不起作用,而while读取每一个while行
根据你想做的事情,你可以在find中使用-exec:

find "$_path" -type f -iname "*your_pattern*" -exec echo {} \;

其中{}将表示匹配的行/文件最后你还需要;`

相关问题