【发布时间】:2015-02-22 22:53:53
【问题描述】:
我需要编写一个脚本来遍历用户输入的目录,然后我需要它来查找目录中的每个项目是链接、文件还是目录。我对 bash 很陌生,我无法弄清楚。
【问题讨论】:
-
for i in *;回声 $i;完成
我需要编写一个脚本来遍历用户输入的目录,然后我需要它来查找目录中的每个项目是链接、文件还是目录。我对 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
请参阅man test 了解更多可用测试。
但要列出它们,我可能会使用 find 实用程序:
find directory -maxdepth 1 -printf '%y %p\n'
或递归:
find directory -printf '%y %p\n'
【讨论】:
您也需要目录或子目录吗?这是作业吗?
您可以使用for 循环访问一组项目,包括目录中的项目:
for file in "$directory/"*
do
echo "File is '$file'"
done
现在,您可以使用stat 来获取文件类型。您需要执行man stat 并阅读文档,因为此命令因计算机而异。
例如,我会使用stat -f%HT $file 来报告这是Regular File、Directory 还是Link。
这应该为您提供足够的信息来帮助您继续前进。如果您刚开始编写 Bash 脚本,我强烈建议您阅读一本关于 Bash 编程的好书。结帐Classic Shell Scripting 阿诺德罗宾斯。
它假定您对 Bash shell 有一定的了解。如果您真的不熟悉 Bash shell,请查看 Learning the Bash Shell。这是对 Bash 的简要介绍,包括一些基本的编程技术。
【讨论】:
如果你想遍历给定目录,你可以使用
read -p "Enter folder name " dir
然后在@Wintermute 回答时迭代目录
for f in $dir/*; do
...
done
【讨论】: