输入子目录并在bash脚本中列出其子目录

时间:2014-05-13 07:38:17

标签: bash relative directory directory-listing

我刚刚开始学习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

但它不起作用.... 谢谢!

3 个答案:

答案 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"

(不带领$)。