当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 18 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : lsdir : 让ls只显示目录的脚本
帖子发表于 : 2008-11-06 23:14 
头像

注册: 2007-07-05 2:48
帖子: 171
送出感谢: 0 次
接收感谢: 0 次
有时候想要 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]
被下载 92 次


最后由 goodluck1982 编辑于 2008-11-07 16:53,总共编辑了 1 次
页首
 用户资料  
 
2 楼 
 文章标题 : Re: lsdir : 让ls只显示目录的脚本
帖子发表于 : 2008-11-06 23:28 
头像

注册: 2007-09-29 3:09
帖子: 5774
送出感谢: 0 次
接收感谢: 4
代码:
find ./ -maxdepth 1 -type d


来个比较坏蛋的做法,可塑性高但alias成ls就不行了... :em04


_________________
HUNT Unfortunately No Talent...


页首
 用户资料  
 
3 楼 
 文章标题 : Re: lsdir : 让ls只显示目录的脚本
帖子发表于 : 2008-11-06 23:29 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
ls -l|grep "^d"|awk '{print $NF}'


页首
 用户资料  
 
4 楼 
 文章标题 : Re: lsdir : 让ls只显示目录的脚本
帖子发表于 : 2008-11-07 9:37 
头像

注册: 2007-07-05 2:48
帖子: 171
送出感谢: 0 次
接收感谢: 0 次
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


页首
 用户资料  
 
5 楼 
 文章标题 : Re: lsdir : 让ls只显示目录的脚本
帖子发表于 : 2008-11-07 9:42 
头像

注册: 2007-07-05 2:48
帖子: 171
送出感谢: 0 次
接收感谢: 0 次
xiooli 写道:
ls -l|grep "^d"|awk '{print $NF}'


如果只是简单的显示出哪些是目录,有很多方法
比如 ls -1F | grep '\/$' 等
只是不够完美 :em09


页首
 用户资料  
 
6 楼 
 文章标题 : Re: lsdir : 让ls只显示目录的脚本
帖子发表于 : 2008-11-07 10:00 

注册: 2006-10-18 15:48
帖子: 700
送出感谢: 0 次
接收感谢: 0 次
我显示目录的方法是:
$ cd 按Tab键 :em09
最蠢了哈哈


页首
 用户资料  
 
7 楼 
 文章标题 : Re: lsdir : 让ls只显示目录的脚本
帖子发表于 : 2008-11-07 14:53 
头像

注册: 2007-07-05 2:48
帖子: 171
送出感谢: 0 次
接收感谢: 0 次
sunzhaoyu2000 写道:
我显示目录的方法是:
$ cd 按Tab键 :em09
最蠢了哈哈


这个或许需要特殊设置
我的Fedora9里不行,按Tab显示所有文件和目录


页首
 用户资料  
 
8 楼 
 文章标题 : Re: lsdir : 让ls只显示目录的脚本
帖子发表于 : 2008-11-09 23:44 

注册: 2008-05-09 10:41
帖子: 4
送出感谢: 0 次
接收感谢: 0 次
好像不能在其它目录执行!

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

如何列出其它目录能?


页首
 用户资料  
 
9 楼 
 文章标题 : Re: lsdir : 让ls只显示目录的脚本
帖子发表于 : 2008-11-10 6:08 
头像

注册: 2007-07-05 2:48
帖子: 171
送出感谢: 0 次
接收感谢: 0 次
是文件写权限的问题
我是默认在当前目录下创建一个临时文件来处理的
你执行命令的目录一定是没有写权限才会出现这种情况
只需要修改脚本中如下一行

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

将其改为如下即可

引用:
tmp=/tmp/.__lsdir_$(date +%s)__tmp


页首
 用户资料  
 
10 楼 
 文章标题 : Re: lsdir : 让ls只显示目录的脚本
帖子发表于 : 2008-12-31 9:46 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 273
折腾精神强大


_________________
● 鸣学


页首
 用户资料  
 
11 楼 
 文章标题 : Re: lsdir : 让ls只显示目录的脚本
帖子发表于 : 2008-12-31 14:42 
头像

注册: 2007-07-05 2:48
帖子: 171
送出感谢: 0 次
接收感谢: 0 次
人生尽在折腾! :em01


页首
 用户资料  
 
12 楼 
 文章标题 : Re: lsdir : 让ls只显示目录的脚本
帖子发表于 : 2009-02-24 10:12 

注册: 2009-01-14 13:07
帖子: 5
送出感谢: 0 次
接收感谢: 0 次
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 次

页首
 用户资料  
 
13 楼 
 文章标题 : Re: lsdir : 让ls只显示目录的脚本
帖子发表于 : 2009-02-24 10:15 

注册: 2009-01-14 13:07
帖子: 5
送出感谢: 0 次
接收感谢: 0 次
goodluck1982 写道:
sunzhaoyu2000 写道:
我显示目录的方法是:
$ cd 按Tab键 :em09
最蠢了哈哈


这个或许需要特殊设置
我的Fedora9里不行,按Tab显示所有文件和目录


在ubuntu下能够实现,很好!!


页首
 用户资料  
 
14 楼 
 文章标题 : Re: lsdir : 让ls只显示目录的脚本
帖子发表于 : 2009-02-24 10:40 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
goodluck1982 写道:
sunzhaoyu2000 写道:
我显示目录的方法是:
$ cd 按Tab键 :em09
最蠢了哈哈


这个或许需要特殊设置
我的Fedora9里不行,按Tab显示所有文件和目录

装 bash-completion 应该就可以了。


_________________
关注我的blog: ε==3


页首
 用户资料  
 
15 楼 
 文章标题 : Re: lsdir : 让ls只显示目录的脚本
帖子发表于 : 2009-02-26 13:37 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 273
代码:
☎ type lld
lld 已被别名为“ls -lUd */”


_________________
● 鸣学


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 18 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译