Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux bash脚本读取目录中的所有文件_Linux_Bash - Fatal编程技术网

Linux bash脚本读取目录中的所有文件

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

如何循环遍历目录?我知道在/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/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的工具。但是它包括