Bash检查是否存在循环内具有变量名的文件
我想检查文件是否存在。当然,这在很多地方都有解释。现在我在一个循环中,就像:Bash检查是否存在循环内具有变量名的文件,bash,loops,conditional-statements,Bash,Loops,Conditional Statements,我想检查文件是否存在。当然,这在很多地方都有解释。现在我在一个循环中,就像: for ((l=0;l<5;l+=1)); do if -a FILENAMEl #FILENAME contains l!!!!!!!!! then "FILENAMEl exists" else do ............. fi done for((l=0;l假设您正在尝试查找文件名格式为file1.csv、file2.csv等的文件 for i in {1..5};
for ((l=0;l<5;l+=1));
do
if -a FILENAMEl #FILENAME contains l!!!!!!!!!
then "FILENAMEl exists"
else
do
.............
fi
done
for((l=0;l假设您正在尝试查找文件名格式为file1.csv、file2.csv等的文件
for i in {1..5};
do f="file$i.csv";
if test -e $f;
then echo "$f exists";
else echo "$f does not exist";
fi
done
也许你需要的只是一个查找
find . -name "file?.csv" -size +10k
您可以将文件名限制为后缀1..5,并对查找结果执行操作(检查find的-exec或更一般的xargs,如下所示)
主要问题是,您将变量名l
的语法与文件名的语法混合在一起。如果您希望将它们一起使用,以形成带有变量的文件名的一部分,则需要语法中断(由“$”
)或使用大括号({}
)
如果文件名中间有一个变量,则括号工作得最好。例如:<代码>“MyoFiele$$L}头。TXT”< /C> >将创建文件,如“代码> MyAuthFiele1Health.TXT ,<代码> MyOxFiele2DHead。TXT 等
以下是更正的原始示例:
for ((l=0;l<5;l+=1))
do
if test -a FILENAME$l
then echo "FILENAME$l exists"
else echo "FILENAME$l doesn't exist"
fi
done
如果你想要更多的极简主义,这里还有另一种方法:
for l in {1..5}; do
file="filename$l"
if [[ -a "$file" ]]; then
echo "$file exists"
else
echo "$file does not exist"
fi
done
for l in {1..5}; do f="filename$l"
[[ -a "$f" ]] && echo "$f exists" || echo "$f does not exist"
done
现在,如果您不只是需要打印状态,还需要执行其他操作,请使用函数调用使额外的工作模块正常工作:
for l in {1..5} ; do f="$filename$l"
[[ -a "$f" ] && process_file $f || non_existant_file $f
done
然后,在其他地方,您应该定义过程文件
和非存在文件
:
process_file() {
local file="$1"
# do whatever is needed for an existing file
}
non_existant_file() {
local file="$1"
# do whatever is needed for a non-existant file
}
你到底想在这里做什么?那里的-a
是什么?你想构造一个带有后缀的文件名并检查它(所以file1
,file2
,等等)?你想检查一个完全按数字命名的文件,还是将数字作为子字符串?还有,“子字符串”这种方法可能无法按您所希望的方式工作。“file102”毕竟包含“2”。除了“102”之外,您是否希望“file102”为“2”返回true?更好的问题是提供文件名的示例(如果不是规范)。(另外,-a
不是bash命令;它可能是test
命令的一个参数,也可以写成[
,但它本身不做任何事情)。啊,非常感谢!它可以工作!还有一个问题:如何插入文件(它是.txt)的附加条件有条目或大于10kB?如果是文本文件,最简单的方法是使用size=$(wc-c
我找到了$f-ge 9,其中f是文件名,9是9kB。因此,这里我检查文件是否大于或等于9kB。但如果我想检查这两种情况(文件存在且大于…),我不确定语法[[-e$f]]&&[$f-ge 9]]?
process_file() {
local file="$1"
# do whatever is needed for an existing file
}
non_existant_file() {
local file="$1"
# do whatever is needed for a non-existant file
}