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
将完成