如何在bash中遍历目录

如何在bash中遍历目录,bash,shell,scripting,Bash,Shell,Scripting,我需要编写一个脚本,它将遍历用户输入的目录,然后我需要它来查找目录中的每个项目是链接、文件还是目录。我对bash非常陌生,我无法理解这一点。您可以在目录中循环这些条目,如下所示: #!/bin/sh for f in *; do [ -f "$f" ] && echo "$f is a regular file." [ -d "$f" ] && echo "$f is a directory." [ -h "$f" ] && echo

我需要编写一个脚本,它将遍历用户输入的目录,然后我需要它来查找目录中的每个项目是链接、文件还是目录。我对bash非常陌生,我无法理解这一点。

您可以在目录中循环这些条目,如下所示:

#!/bin/sh

for f in *; do
  [ -f "$f" ] && echo "$f is a regular file."
  [ -d "$f" ] && echo "$f is a directory."
  [ -h "$f" ] && echo "$f is a symbolic link."
done
有关更多可用测试,请参见
人工测试

但要列出它们,我可能会使用
find
实用程序:

find directory -maxdepth 1 -printf '%y %p\n'
或递归地:

find directory -printf '%y %p\n'

如果要在给定目录中迭代,可以使用

read -p "Enter folder name " dir
然后将目录迭代为@Wintermute

for f in $dir/*; do
...
done

你需要一个目录还是子目录?这是家庭作业吗

您可以使用
for
循环浏览一组项目,包括目录中的项目:

for file in "$directory/"*
do
     echo "File is '$file'"
done
现在,您可以使用
stat
获取文件类型。您需要执行
man stat
并阅读文档,因为此命令因计算机而异

例如,在我的上,我将执行
stat-f%HT$文件
,它将报告这是一个
常规文件
目录
,还是
链接

这会给你足够的信息让你行动起来。如果您刚刚开始编写Bash脚本,我强烈建议您阅读一本关于Bash编程的好书。阿诺德·罗宾斯结账


它假定对bashshell有一些了解。如果您真的不熟悉bashshell,请查看。这是对Bash的温和介绍,包括一些基本编程技术。

for i in*;不要重复$i;完成