打印出只有目录而不是文件的名称(BASH)

时间:2009-10-08 01:18:04

标签: bash unix grep

到目前为止,我有大部分需要的东西我只是不确定grep命令只能获取目录或者没有目录。对于上下文,这是原始请求:

此脚本应采用单个命令行参数,该参数将是目录的路径。 (完成)脚本应该确保路径实际上是一个目录,并且用户具有读取权限。 (完成)然后,您的程序应该捕获目录上的ls命令的输出。 (完成)然后应该打印出只找到的子目录的名称。文件应该被忽略。 (???)

我到目前为止:

#!/bin/bash

if [ -d $1 ] && [ -r $1 ] ; then 
  ls -l $1 | tee output | grep  ______
fi

7 个答案:

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

ls是“只有眼睛”

请参阅:Parsing ls

find是正确的命令。见 Andy Ross的回答。

答案 5 :(得分:0)


ls -l . | awk '/^d/{printf "%s ",$8}'

虽然参数$8取决于您机器上ls -l的输出

答案 6 :(得分:0)

您可能不需要-d或-r检查:

shopt -s failglob
echo "$1"/*/.

将echo替换为您真正想要做的事情(原始问题没有说明)。