我刚刚开始学习bash脚本并且有一个我无法找到答案的问题。我目前在一个名为lab2的目录中。在这个目录里面,我有另一个目录"学生"其中包含以每个学生的netid命名的目录。喜欢〜/ lab2 / students / johndoe。所以学生里面有很多目录。我的脚本位于lab2目录中,我需要编写一个脚本来打印学生目录中的目录名称(当然我需要使用相对路径)....我该怎么做? 我尝试了一些,其中一个是
$MYDIR="$PWD/students"
DIRS=`ls -l . | egrep '^d' | awk '{print $8}'`
for DIR in $DIRS
do
echo ${DIR}
done
但它不起作用.... 谢谢!
答案 0 :(得分:2)
检查以下是否有帮助:
find ~/lab2/students -type d -maxdepth 1
如果您只想要目录(学生姓名):
find ~/lab2/students -maxdepth 1 -type d | awk -F/ '{print $NF}'
请阅读find
的手册页,它会有很多帮助。
awk -F/ '{print $NF}' is filtering the last field.
如果您想在bash脚本中使用这些目录名称,可以执行以下操作:
#!/bin/bash
for file in $(find ~/lab2/students -maxdepth 1 -type d) #or you can use the awk one here
do
echo $file
#your stuff here
done
答案 1 :(得分:1)
扩展@Jord的答案,您可以使用find
一些选项来对输出进行非常精细的控制:
-mindepth
和-maxdepth
控制递归深度(默认情况下为0-infinite)。-type d
仅列出目录。-printf %f
打印没有前导目录的目录(或文件或符号链接等)的名称。 man find
有更多信息,info --raw-escapes --subnodes find | less --raw-control-chars
有完整的详细信息。
答案 2 :(得分:0)
$MYDIR="$PWD/students"
但它不起作用......
难怪 - 正确的语法是
MYDIR="$PWD/students"
(不带领$
)。