循环遍历给定目录中的文件[重复]
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
【讨论】:
这和小次郎的回答一样。以上是关于循环遍历给定目录中的文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章