循环遍历给定目录中的文件[重复]

Posted

技术标签:

【中文标题】循环遍历给定目录中的文件[重复]【英文标题】:Loop through files in a given directory [duplicate] 【发布时间】:2014-06-17 23:53:16 【问题描述】:

我正在尝试遍历用户指定目录中的每个文件。 这是我的代码:

clear
echo "enter the directory path: \n"
read directory
for file in $directory; do
    echo $file
done

我的输入,例如:/home/user/Downloads

我得到的输出:/home/user/Downloads

如果我使用

clear
for file in *; do
    echo $file
done

有效,但只显示当前目录的内容

【问题讨论】:

您是要递归地遍历文件,还是只遍历给定目录中的文件,而不是其子目录? 只是给定目录中的文件,而不是子目录中的文件 【参考方案1】:

如果您只希望当前目录中的文件不递归,请结合您拥有的:

read -p 'Enter the directory path: ' directory
for file in "$directory"/*; do
  echo "$file"
done

如果你想递归循环并且你有 bash 4,这并不难:

shopt -s globstar
for file in "$directory"/**/*; do …

但是如果你只有 bash 3,你最好使用find

find "$directory"

【讨论】:

对于 bash 3,您将“shopt -s globstar”替换为“find "$directory"”? @kulan 您可以将find 与任何版本的 bash 一起使用,因为它是一个外部命令。 find 本身就很强大,但如果可以在纯 bash 中做你想做的事,你可以避免使用 forking 不,只是我开始学习bash脚本,我不清楚你所说的,所以我想确定一下。也许我将来会需要它。 @kulan 你一定要学习use find。它很复杂,但非常有用。【参考方案2】:

试试

dir="$GOL_HOME/test_dir"
file="file_*.csv"
for file in `cd $dir;ls -1 $file` ;do
   echo $file
done 

【讨论】:

【参考方案3】:

你可以写这个脚本

 #!/bin/bash

clear
echo "enter the directory path: \n"
read directory
for file in $directory/*; do
    echo $file
done

【讨论】:

这和小次郎的回答一样。

以上是关于循环遍历给定目录中的文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

目录中每个文件的循环代码[重复]

如何循环遍历 Perl 目录中的文件? [复制]

bash中的for循环[重复]

如何从循环中遍历枚举中的条目[重复]

使用 for 循环重复字符串

在Javascript中循环遍历数组的元素[重复]