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

kul*_*lan 3 bash

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

clear
echo "enter the directory path: \n"
read directory
for file in $directory; do
    echo $file
done
Run Code Online (Sandbox Code Playgroud)

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

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

如果我使用

clear
for file in *; do
    echo $file
done
Run Code Online (Sandbox Code Playgroud)

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

koj*_*iro 11

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

read -p 'Enter the directory path: ' directory
for file in "$directory"/*; do
  echo "$file"
done
Run Code Online (Sandbox Code Playgroud)

如果你想递归循环并且你有 bash 4,那也没什么难的:

shopt -s globstar
for file in "$directory"/**/*; do …
Run Code Online (Sandbox Code Playgroud)

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

find "$directory"
Run Code Online (Sandbox Code Playgroud)