到目前为止,我有大部分需要的东西我只是不确定grep命令只能获取目录或者没有目录。对于上下文,这是原始请求:
此脚本应采用单个命令行参数,该参数将是目录的路径。 (完成)脚本应该确保路径实际上是一个目录,并且用户具有读取权限。 (完成)然后,您的程序应该捕获目录上的ls命令的输出。 (完成)然后应该打印出只找到的子目录的名称。文件应该被忽略。 (???)
我到目前为止:
#!/bin/bash
if [ -d $1 ] && [ -r $1 ] ; then
ls -l $1 | tee output | grep ______
fi
答案 0 :(得分:7)
做一个grep
ls -l | grep '^d'
或只是使用find
find $1 -type d
答案 1 :(得分:2)
提示 - 来自man ls
:
-F
...在作为目录的每个路径名后立即显示斜杠(/
),在每个可执行路径名后面显示星号(*
),at符号({ {1}})在每个符号链接之后,每个套接字后面都有一个等号(@
),每次出来后都有一个百分号(=
),后面有一个竖线(%
)每个都是FIFO。
|
...如果该文件是目录,请在每个文件名后写一个斜杠(-p
)。
答案 2 :(得分:1)
-p
的{{1}}选项可能会有用。请参阅ls
。
答案 3 :(得分:1)
find $1 -maxdepth 1 -type d
也很好用。如果上面的awk示例计数,您可能还包括perl:
grep -d, glob("$path/*")
...在数组上下文中调用时会得到一个目录列表。
答案 4 :(得分:1)
答案 5 :(得分:0)
ls -l . | awk '/^d/{printf "%s ",$8}'
虽然参数$8
取决于您机器上ls -l
的输出
答案 6 :(得分:0)
您可能不需要-d或-r检查:
shopt -s failglob
echo "$1"/*/.
将echo替换为您真正想要做的事情(原始问题没有说明)。