免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2988 | 回复: 12
打印 上一主题 下一主题

请问个文件显示问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-05 16:04 |只看该作者 |倒序浏览
一个目录下,有子目录有文件
我想显示这个目录下的所有文件
只显示文件但不显示子目录,并且把文件按时间进行排序
比如有目录dir1
下有子目录dir11 和目录dir12
dir11目录下有如下文件
-rwxr--r--  1 root root  120207204 2008-11-27 18:03 test1
-rwxr--r--  1 root root   29050568 2008-11-28 09:47 test2
-rwxr--r--  1 root root    5854397 2008-11-27 15:40 test3
dir12目录有如下文件
-rwxr--r--  1 root root    7237799 2008-11-27 17:18 test4
-rwxr--r--  1 root root    1605481 2008-11-27 17:32 test5

我想要的最终结果是
-rwxr--r--  1 root root    5854397 2008-11-27 15:40 test3
-rwxr--r--  1 root root    7237799 2008-11-27 17:18 test4
-rwxr--r--  1 root root    1605481 2008-11-27 17:32 test5
-rwxr--r--  1 root root  120207204 2008-11-27 18:03 test1
-rwxr--r--  1 root root   29050568 2008-11-28 09:47 test2
请问有什么命令能达到这种效果

论坛徽章:
0
2 [报告]
发表于 2008-12-05 16:25 |只看该作者
try
find  . -type d -exec ls -al {} \; | grep "^d"

论坛徽章:
0
3 [报告]
发表于 2008-12-05 16:30 |只看该作者
谢谢,按楼上的试了不行

论坛徽章:
0
4 [报告]
发表于 2008-12-05 16:34 |只看该作者
原帖由 szkarry 於 2008-12-5 16:30 發表
謝謝,按樓上的試了不行

  1. find  . -type d -exec ls -al {} \; | grep "^-"
复制代码

论坛徽章:
0
5 [报告]
发表于 2008-12-05 16:42 |只看该作者
谢谢,按楼上的做了,是可以不显示子目录排列文件了
不过排列的文件是按每个子目录内的时间排的
我的原意是,不显示子目录,而且按时间排序是把所有子目录内的文件统一按时间排序
就象我前面的例子样的dir2 目录下的test4 和 test5文件排列在dir1 目录下文件test1 test2前面,
但排在dir1目录下的test3后面

论坛徽章:
0
6 [报告]
发表于 2008-12-05 17:28 |只看该作者
這位大哥啊.. 你要自己寫 code 啊來討論呢, 不要只是提需求而已啊

因為這樣變成你問我答,不是討論哦


  1. #!/bin/bash

  2. log=/tmp/tmp-$$.dat
  3. rm -f $log

  4. IFS="
  5. "

  6. for name in $(find . -type f)
  7. do
  8.    t=$(stat -c %X $name)
  9.    file=$name
  10.    echo -e "$t\t$file" >> $log
  11. done

  12. IFS="
  13. "

  14. for line in $(sort -n $log)
  15. do
  16.    time=$(echo "$line" | awk '{ print $1 }')
  17.    file=$(echo "$line" | awk '{ print $2 }')
  18.    path=$( dirname $(echo "$line" | awk '{ print $2 }') )
  19.    cwd_path=$PWD

  20.    cd $path
  21.    ls -l $(basename $file)
  22.    cd $cwd_path
  23. done

  24. rm -f $log
复制代码

[ 本帖最后由 kenduest 于 2008-12-5 17:33 编辑 ]

论坛徽章:
34
亥猪
日期:2015-03-20 13:55:11戌狗
日期:2015-03-20 13:57:01酉鸡
日期:2015-03-20 14:03:56未羊
日期:2015-03-20 14:18:30子鼠
日期:2015-03-20 14:20:14丑牛
日期:2015-03-20 14:20:31辰龙
日期:2015-03-20 14:35:34巳蛇
日期:2015-03-20 14:35:56操作系统版块每日发帖之星
日期:2015-11-06 06:20:00操作系统版块每日发帖之星
日期:2015-11-08 06:20:00操作系统版块每日发帖之星
日期:2015-11-19 06:20:00黄金圣斗士
日期:2015-11-24 10:43:13
7 [报告]
发表于 2008-12-05 18:05 |只看该作者

回复 #5 szkarry 的帖子

2楼少给个 -v 参数。那就 find | ls -lt 喽~

论坛徽章:
0
8 [报告]
发表于 2008-12-05 18:29 |只看该作者
我对shell 编程不怎么熟悉
要是我用代码实现的话那就是循环遍历所有目录中的文件
把每个文件都变成个节点挂到个链表中,再对链表进行排序

论坛徽章:
0
9 [报告]
发表于 2008-12-05 18:32 |只看该作者
原帖由 szkarry 於 2008-12-5 18:29 發表
我對shell 編程不怎麼熟悉
要是我用代碼實現的話那就是循環遍歷所有目錄中的文件
把每個文件都變成個節點掛到個鏈表中,再對鏈表進行排序


是的...

因為 shell script 無法這樣複雜,所以你可以看到我程式碼

1. 取出該文件時間 + 完整路徑的檔名
2. 依據時間排序其內容並顯示

若是我改成 python 來寫也很快,只是一般來說用 shell 來寫比較簡單與單純一點

论坛徽章:
0
10 [报告]
发表于 2008-12-06 02:23 |只看该作者
试试这个:

ls -lrt $(find dir1 -type f)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP