lsdir : 让ls只显示目录的脚本

由本社区发起的开源项目
头像
goodluck1982
帖子: 171
注册时间: 2007-07-05 2:48

lsdir : 让ls只显示目录的脚本

#1

帖子 goodluck1982 » 2008-11-06 23:14

有时候想要 ls 只显示目录,不显示文件
结果ls却没有直接的参数可以实现
于是写了一个脚本
支持和 ls 一样的参数

代码: 全选

#!/bin/bash
# goodluck_1982@163.com
# 2008-11-06 23:08:02

# 将参数分离成两部分,一部分是文件,另一部分是选项
a=("$@")
opt=""   #选项部分
fs=()    #文件部分,用数组存储
i=0
while [ $i -lt $# ]
do
     t=${a[i]}
     if [ "${t:0:1}" = "-" ] ; then
           opt="${opt} $t"
     else
           ss=${#fs[*]}
           fs[ss]=$t
     fi
     let i=i+1
done


tmp=.__lsdir_$(date +%s)__tmp
if [ ${#fs[*]} -eq 0 ] ; then
     ls -1F | grep '\/$' >$tmp
else
     ls -1Fd "${fs[@]}"  | grep '\/$' >$tmp
fi

sed  -i "s/\/$//" $tmp
sed  -i "s/'/'\\\''/g" $tmp   #处理文件名中含有单引号的特殊情况,每一个单引号都要处理
sed  -i "s/.*/'&'/" $tmp      #给文件名两边加上单引号

files=$(tr -t '\n' ' ' < $tmp)
eval  ls -d --color=tty $opt  $files

\rm $tmp

附件
lsdir.gz
(564 Bytes) 已下载 159 次
上次由 goodluck1982 在 2008-11-07 16:53,总共编辑 1 次。
头像
HuntXu
帖子: 5776
注册时间: 2007-09-29 3:09

Re: lsdir : 让ls只显示目录的脚本

#2

帖子 HuntXu » 2008-11-06 23:28

代码: 全选

find ./ -maxdepth 1 -type d
来个比较坏蛋的做法,可塑性高但alias成ls就不行了... :em04
HUNT Unfortunately No Talent...
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: lsdir : 让ls只显示目录的脚本

#3

帖子 xiooli » 2008-11-06 23:29

ls -l|grep "^d"|awk '{print $NF}'
头像
goodluck1982
帖子: 171
注册时间: 2007-07-05 2:48

Re: lsdir : 让ls只显示目录的脚本

#4

帖子 goodluck1982 » 2008-11-07 9:37

HuntXu 写了:

代码: 全选

find ./ -maxdepth 1 -type d
来个比较坏蛋的做法,可塑性高但alias成ls就不行了... :em04
不瞒你说
我的最初版本就是就是利用 find -maxdepth 1 实现的
不过那样不能完全象 ls 一样使用, 而且显示方式也与ls的不同
#!/bin/bash
#list only directories
if [ -z $(echo "$@" |grep 'a') ] ; then
find -maxdepth 1 -type d | cut -f2 -d/ | grep -v '^\.'|\
awk '{printf "%s ",$1}' |xargs ls -d --color=tty "$@"
else
find -maxdepth 1 -type d | cut -f2 -d/ |\
awk '{printf "%s ",$1}' |xargs ls -d --color=tty "$@"
fi
头像
goodluck1982
帖子: 171
注册时间: 2007-07-05 2:48

Re: lsdir : 让ls只显示目录的脚本

#5

帖子 goodluck1982 » 2008-11-07 9:42

xiooli 写了:ls -l|grep "^d"|awk '{print $NF}'
如果只是简单的显示出哪些是目录,有很多方法
比如 ls -1F | grep '\/$' 等
只是不够完美 :em09
sunzhaoyu2000
帖子: 700
注册时间: 2006-10-18 15:48

Re: lsdir : 让ls只显示目录的脚本

#6

帖子 sunzhaoyu2000 » 2008-11-07 10:00

我显示目录的方法是:
$ cd 按Tab键 :em09
最蠢了哈哈
头像
goodluck1982
帖子: 171
注册时间: 2007-07-05 2:48

Re: lsdir : 让ls只显示目录的脚本

#7

帖子 goodluck1982 » 2008-11-07 14:53

sunzhaoyu2000 写了:我显示目录的方法是:
$ cd 按Tab键 :em09
最蠢了哈哈
这个或许需要特殊设置
我的Fedora9里不行,按Tab显示所有文件和目录
天下独绝
帖子: 4
注册时间: 2008-05-09 10:41

Re: lsdir : 让ls只显示目录的脚本

#8

帖子 天下独绝 » 2008-11-09 23:44

好像不能在其它目录执行!

sy@sy-desktop:/usr/lib$ /home/sy/lsdir.sh
/home/sy/lsdir.sh: line 25: .__lsdir_1226245223__tmp: Permission denied
sed: can't read .__lsdir_1226245223__tmp: No such file or directory
sed: can't read .__lsdir_1226245223__tmp: No such file or directory
sed: can't read .__lsdir_1226245223__tmp: No such file or directory
/home/sy/lsdir.sh: line 34: .__lsdir_1226245223__tmp: No such file or directory
.
rm: cannot remove `.__lsdir_1226245223__tmp': No such file or directory

如何列出其它目录能?
头像
goodluck1982
帖子: 171
注册时间: 2007-07-05 2:48

Re: lsdir : 让ls只显示目录的脚本

#9

帖子 goodluck1982 » 2008-11-10 6:08

是文件写权限的问题
我是默认在当前目录下创建一个临时文件来处理的
你执行命令的目录一定是没有写权限才会出现这种情况
只需要修改脚本中如下一行

tmp=.__lsdir_$(date +%s)__tmp

将其改为如下即可
tmp=/tmp/.__lsdir_$(date +%s)__tmp
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: lsdir : 让ls只显示目录的脚本

#10

帖子 eexpress » 2008-12-31 9:46

折腾精神强大
● 鸣学
头像
goodluck1982
帖子: 171
注册时间: 2007-07-05 2:48

Re: lsdir : 让ls只显示目录的脚本

#11

帖子 goodluck1982 » 2008-12-31 14:42

人生尽在折腾! :em01
ritow
帖子: 5
注册时间: 2009-01-14 13:07

Re: lsdir : 让ls只显示目录的脚本

#12

帖子 ritow » 2009-02-24 10:12

xiooli 写了:ls -l|grep "^d"|awk '{print $NF}'
不能显示以.开头的隐藏文件夹;
不能正确显示文件夹名子中包含空格的文件夹;

ls -Al|grep ^d|awk '{$1="";$2="";$3="";$4="";$5="";$6="";$7="";print $0}'|sed 's/^\ *//g'
上次由 ritow 在 2009-02-24 10:16,总共编辑 1 次。
ritow
帖子: 5
注册时间: 2009-01-14 13:07

Re: lsdir : 让ls只显示目录的脚本

#13

帖子 ritow » 2009-02-24 10:15

goodluck1982 写了:
sunzhaoyu2000 写了:我显示目录的方法是:
$ cd 按Tab键 :em09
最蠢了哈哈
这个或许需要特殊设置
我的Fedora9里不行,按Tab显示所有文件和目录
在ubuntu下能够实现,很好!!
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

Re: lsdir : 让ls只显示目录的脚本

#14

帖子 bones7456 » 2009-02-24 10:40

goodluck1982 写了:
sunzhaoyu2000 写了:我显示目录的方法是:
$ cd 按Tab键 :em09
最蠢了哈哈
这个或许需要特殊设置
我的Fedora9里不行,按Tab显示所有文件和目录
装 bash-completion 应该就可以了。
关注我的blog: ε==3
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: lsdir : 让ls只显示目录的脚本

#15

帖子 eexpress » 2009-02-26 13:37

代码: 全选

☎ type lld
lld 已被别名为“ls -lUd */”
● 鸣学
回复