Linux bash脚本读取目录中的所有文件
如何循环遍历目录?我知道在/var/文件中有f的Linux bash脚本读取目录中的所有文件,linux,bash,Linux,Bash,如何循环遍历目录?我知道在/var/文件中有f的;不要重复$f;完成问题是它会一次吐出目录中的所有文件。我想一个接一个地使用$f变量做一些事情。我认为while循环最适合这样做,但我不知道如何实际编写while循环 任何帮助都将不胜感激。一个简单的循环应该可以工作: for file in /var/* do #whatever you need with "$file" done 请参见您可以不使用循环: find /path/to/dir -type f -exec /your/f
;不要重复$f;完成代码>问题是它会一次吐出目录中的所有文件。我想一个接一个地使用$f变量做一些事情。我认为while循环最适合这样做,但我不知道如何实际编写while循环
任何帮助都将不胜感激。一个简单的循环应该可以工作:
for file in /var/*
do
#whatever you need with "$file"
done
请参见您可以不使用循环:
find /path/to/dir -type f -exec /your/first/command \{\} \; -exec /your/second/command \{\} \;
HTH要使用while循环编写,可以执行以下操作:
ls -f /var | while read -r file; do cmd $file; done
ls-f/var |同时读取-r文件;执行cmd$文件;完成
这样做的主要缺点是cmd是在
一个次shell,如果你尝试的话会造成一些困难
设置变量。主要优点是外壳
不需要将所有文件名加载到内存中,并且
没有地球仪。当你有很多文件在里面的时候
目录,这些优点很重要(这是
为什么在ls上使用-f;在大型目录中ls本身可以
运行需要几十秒,并且-f速度
在这种情况下,'for file In/var/*'
很可能会由于一个glob错误而失败。)@Mu_Qiao-在执行完该操作后,shell脚本中有两个命令。首先是回显$file,然后回显“hi”。目录中有10个文件。我得到的是十个文件名,然后是hi,而不是1,hi,2,hi,3,hi…etcO.K。知道了。可能是因为我在目录名周围加了引号。@mike yes引号阻止文件名expansions@Mu_Qiao-如果文件名中有空格,你该怎么办?@mike没关系,只要在$file周围使用双引号,for
循环完全正确,但你是在单个项目上循环,文本目录名/var/files
。您的问题描述不正确;您发布的程序将只回显/var/文件
。我想您可能需要在/var/files/*
中为f添加。注意在“$f”
周围使用双引号。这是一个很好的解决方案。它是唯一一个可以处理非常完整的目录和复杂的cmd的工具。但是它包括
和。