在给定目录中循环遍历文件

12

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

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

它能够运行,但仅显示当前目录的内容。


你想要递归地循环遍历文件,还是只遍历给定目录中的文件而不包括其子目录? - kojiro
1
只获取给定目录中的文件,而不是子目录中的文件。 - kulan
3个回答

26

如果你只想在当前目录下以非递归方式获取文件,则将你所拥有的内容结合起来:

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
@kulan,你可以在任何版本的Bash中使用find命令,因为它是一个外部命令。而且find 命令本身就非常强大,但如果你可以用纯Bash实现你想要的功能,那么你可以避免forking操作。 - kojiro
不,只是我开始学习bash脚本编程,我对你说的话有些不清楚,所以想确认一下。也许将来会用到它。 - kulan
@kulan 你应该一定要学会使用 find。虽然它很复杂,但非常实用。 - kojiro

3
最初的回答
尝试
dir="${GOL_HOME}/test_dir"
file="file_*.csv"
for file in `cd ${dir};ls -1 ${file}` ;do
   echo $file
done 

对于我来说,最好的解决方案是在cd ./dist/libs;ls -1 ${file}中循环文件;执行以下操作: echo $file cd "./dist/libs/$file" pwd cd ../../.. 完成 - evanjmg

-6

你可以编写这个脚本

 #!/bin/bash

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

3
这与小次郎的回答相同。 - chepner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接