Linux 如何使用while循环仅读取特定模式的文件名

Linux 如何使用while循环仅读取特定模式的文件名,linux,shell,unix,ksh,Linux,Shell,Unix,Ksh,假设我在特定目录中有以下文件 ABC_TEXT_FILE_365.csv ABC_TEXT_FILE_365_07h32.csv BCD_TEXT_FILE_432.csv BCD_TEXT_FILE_432_08h28.csv FGB_TEXT_FILE_567.csv FGB_TEXT_FILE_567_09h45.csv 现在我只想读取其中包含h*.csv模式的文件,然后执行更多操作 但是我在读文件名时知道 将读取所有文件名。?有什么解决办法吗。请帮助我猜您指的是所有与*h*.csv匹配

假设我在特定目录中有以下文件

ABC_TEXT_FILE_365.csv
ABC_TEXT_FILE_365_07h32.csv
BCD_TEXT_FILE_432.csv
BCD_TEXT_FILE_432_08h28.csv
FGB_TEXT_FILE_567.csv
FGB_TEXT_FILE_567_09h45.csv
现在我只想读取其中包含h*.csv模式的文件,然后执行更多操作

但是我在读文件名时知道


将读取所有文件名。?有什么解决办法吗。请帮助

我猜您指的是所有与
*h*.csv
匹配的文件,在这种情况下,您可能希望使用
进行如下循环:

for i in *h*.csv; do 
    while read line; do 
        # do some stuff, e.g. echo "$line"
    done < "$i"
done
用于*h*.csv中的i;做
读行时;做
#做一些事情,例如echo“$line”
完成<“$i”
完成
如果您有可能拥有与该模式匹配的任何目录,您可能还需要添加一个测试,以确保循环中的每个项都是一个文件。这将是:

for i in *h*.csv; do 
    if [ -f "$i" ]; then 
        while read line; do 
            echo "$line" 
        done < "$i"
    fi
done
用于*h*.csv中的i;做
如果[-f“$i”];然后
读行时;做
回音“$line”
完成<“$i”
fi
完成

我猜您指的是匹配
*h*.csv
的所有文件,在这种情况下,您可能希望对
循环使用
,如下所示:

for i in *h*.csv; do 
    while read line; do 
        # do some stuff, e.g. echo "$line"
    done < "$i"
done
用于*h*.csv中的i;做
读行时;做
#做一些事情,例如echo“$line”
完成<“$i”
完成
如果您有可能拥有与该模式匹配的任何目录,您可能还需要添加一个测试,以确保循环中的每个项都是一个文件。这将是:

for i in *h*.csv; do 
    if [ -f "$i" ]; then 
        while read line; do 
            echo "$line" 
        done < "$i"
    fi
done
用于*h*.csv中的i;做
如果[-f“$i”];然后
读行时;做
回音“$line”
完成<“$i”
fi
完成

我猜您指的是匹配
*h*.csv
的所有文件,在这种情况下,您可能希望对
循环使用
,如下所示:

for i in *h*.csv; do 
    while read line; do 
        # do some stuff, e.g. echo "$line"
    done < "$i"
done
用于*h*.csv中的i;做
读行时;做
#做一些事情,例如echo“$line”
完成<“$i”
完成
如果您有可能拥有与该模式匹配的任何目录,您可能还需要添加一个测试,以确保循环中的每个项都是一个文件。这将是:

for i in *h*.csv; do 
    if [ -f "$i" ]; then 
        while read line; do 
            echo "$line" 
        done < "$i"
    fi
done
用于*h*.csv中的i;做
如果[-f“$i”];然后
读行时;做
回音“$line”
完成<“$i”
fi
完成

我猜您指的是匹配
*h*.csv
的所有文件,在这种情况下,您可能希望对
循环使用
,如下所示:

for i in *h*.csv; do 
    while read line; do 
        # do some stuff, e.g. echo "$line"
    done < "$i"
done
用于*h*.csv中的i;做
读行时;做
#做一些事情,例如echo“$line”
完成<“$i”
完成
如果您有可能拥有与该模式匹配的任何目录,您可能还需要添加一个测试,以确保循环中的每个项都是一个文件。这将是:

for i in *h*.csv; do 
    if [ -f "$i" ]; then 
        while read line; do 
            echo "$line" 
        done < "$i"
    fi
done
用于*h*.csv中的i;做
如果[-f“$i”];然后
读行时;做
回音“$line”
完成<“$i”
fi
完成

简单的答案是

dir=$1 <or hardcoded path>
for filename in `find $dir -name "*h*.csv"`
do

echo $filename
#job you want to do further

done
dir=$1
对于'find$dir-name“*h*.csv”中的文件名`
做
echo$filename
#你想进一步做的工作
完成

简单的答案是

dir=$1 <or hardcoded path>
for filename in `find $dir -name "*h*.csv"`
do

echo $filename
#job you want to do further

done
dir=$1
对于'find$dir-name“*h*.csv”中的文件名`
做
echo$filename
#你想进一步做的工作
完成

简单的答案是

dir=$1 <or hardcoded path>
for filename in `find $dir -name "*h*.csv"`
do

echo $filename
#job you want to do further

done
dir=$1
对于'find$dir-name“*h*.csv”中的文件名`
做
echo$filename
#你想进一步做的工作
完成

简单的答案是

dir=$1 <or hardcoded path>
for filename in `find $dir -name "*h*.csv"`
do

echo $filename
#job you want to do further

done
dir=$1
对于'find$dir-name“*h*.csv”中的文件名`
做
echo$filename
#你想进一步做的工作
完成

for
循环的
潜在问题(即,
用于*h*.csv中的f;do…
用于“find…”
)中的f)是,如果有太多可用文件,则会使命令行过长。这是因为在处理
for
循环之前,
*
或内部
find
被扩展为一个大的命令行

另一种稳健的模式是:

find . -name \*h\*.csv | while read f; do echo process $f; done

也就是说,
find
查找具有该模式的所有文件并将其打印出来,
,同时
将stdin一次读取一行到
f
,并对其进行处理。

for
循环的
可能存在问题(即,
用于f in*h*.csv;do…
用于f in'find…
)如果有太多的文件可用,那么这将使命令行过长。这是因为在处理
for
循环之前,
*
或内部
find
被扩展为一个大的命令行

另一种稳健的模式是:

find . -name \*h\*.csv | while read f; do echo process $f; done

也就是说,
find
查找具有该模式的所有文件并将其打印出来,
,同时
将stdin一次读取一行到
f
,并对其进行处理。

for
循环的
可能存在问题(即,
用于f in*h*.csv;do…
用于f in'find…
)如果有太多的文件可用,那么这将使命令行过长。这是因为在处理
for
循环之前,
*
或内部
find
被扩展为一个大的命令行

另一种稳健的模式是:

find . -name \*h\*.csv | while read f; do echo process $f; done

也就是说,
find
查找具有该模式的所有文件并将其打印出来,
,同时
将stdin一次读取一行到
f
,并对其进行处理。

for
循环的
可能存在问题(即,
用于f in*h*.csv;do…
用于f in'find…
)如果有太多的文件可用,那么这将使命令行过长。这是因为在处理
for
循环之前,
*
或内部
find
被扩展为一个大的命令行

另一种稳健的模式是:

find . -name \*h\*.csv | while read f; do echo process $f; done

也就是说,
find
查找具有该模式的所有文件并将其打印出来,
同时将stdin一行一行地读入
f
,并对其进行处理。

您可以在if语句中加入正则表达式,以满足您的特定需要。您的意思是说
[if-f*h*.csv]***而通过循环***完成fi
将完成