摘自 http://hi.baidu.com/zaoyuan1217/blog/item/fd69575660366b4fd10906b9.html

要列出当前目录下所有的文件名和目录名直接使用ls命令即可。
但如何只列出文件名而不列出目录呢?
查遍了ls 的帮助,也没看到有这个现成的选项。
幸好这个问题还是比较常见的,网上已经有了一些解答,但实验之后,我发现看到的几个链接给出的解决方法都是不完全正确的。具体如下。

一、网上流传的解法

首先,ls -l 命令可以列出如下格式的完整信息:
drwxr-xr-x 4 junfeng junfeng 4096 2009-11-26 01:04 bin
-rw-r--r-- 1 junfeng junfeng 103 2009-11-26 13:35 CMakeLists.txt
drwxr-xr-x 2 junfeng junfeng 4096 2009-11-26 01:06 src
可以看到,文件和目录的区别在于第一列是d还是-。这就需要在ls的基础上使用grep命令来对ls输出的每一行进行过滤。进一步使用ls -l | grep ^[^d]或者 ls -l | grep -v ^d 命令得到如下结果:
-rw-r--r-- 1 junfeng junfeng 103 2009-11-26 13:35 CMakeLists.txt
现在目录被过滤掉了。grep ^[^d]中,^[^d] 是一个正则表达式,[^d]表示字符串含有一个不是d的字符,^d表示以d开头,^[^d]表示不以d开头。
但有时候只需要获得文件名,需要进一步排除权限,日期等信息,那么再进一步加入awk命令。
ls -l | grep ^[^d] | awk '{print $8}'
结果如下:
CMakeLists.txt
重新观察之前的结果
-rw-r--r-- 1 junfeng junfeng 103 2009-11-26 13:35 CMakeLists.txt

awk '{print $8}' 中数字8的含义是第8列(列和列之间以空格符分割),也就是文件名CMakeList.txt这一部分, 

二、此方法的漏洞分析和正确的方法(可能)

上述方法有一个重要的漏洞,那就是使用了awk '{print $8}'命令。前面提到这个命令是以空格符来判断列和列的分隔的。那么如果文件名中就包含空格会怎么样呢
继续实验一下。 运行touch "f ile"创建一个名为"f ile"的文件。注意文件名中的空格。
再重新运行
ls -l | grep ^[^d] | awk '{print $8}'
结果如下:
CMakeLists.txt
f
果然得到了错误的结果。
仔细阅读文档,发现一个可行而且比较简便的方法:
ls -1 -F | grep -v [/$]
解释如下:
ls -1 ,注意这里是数字1,作用是单列输出。

ls -F:根据文件、目录等信息在文件名或目录名最后给予附加数据结构,例如:

*代表可执行文件;/代表目录;=代表socket文件;|代表FIFO文件;@代表连接文件
ls的输出:
bin CMakeLists.txt f ile src
ls -1的输出:
bin
CMakeLists.txt
f ile
src
下面看ls -F的输出
bin/ CMakeLists.txt f ile src/
可见目录项的结尾被添加了 '/' 字符。这样便能够简单的区分目录和文件了。
而 grep -v [/$],[/$]表达式匹配的是以'/'结尾的字符串,而-v选项则是排除这些匹配的字符串。

最后给出linux下正确的只列出当前目录下文件名的方法如下:
ls -1 -F | grep - v[/$]

在我们的例子中执行这个命令的输出如下:
CMakeLists.txt
f ile

linux下正确的只列出当前目录下目录名的方法

1、一般情况下可使用 ls -l | grep ^d ,若只列出目录名: ls -l | grep ^d | awk '{print $8}'

2、若目录名中有空格,可使用ls -F | grep [/$],不能写成 ls -F | grep [*/$], [*/$]表示以*或者/结尾都可以

3、一个最简单的方法,使用 ls -d */,可以达到与方法2相同的效果,如 ls -d /boot | sed 's/\///g' 

sed 's/old/new/g':以行为单位进行查找替换,注意:要删除“/”需要使用转义字符。

ls 显示目录和文件的技巧的更多相关文章

  1. 如何让ls按目录和文件 分开进行列表?

    linux的思想是: 有很多 "小工具", 但是功能并不弱的 小工具, 组合起来完成一些复杂的工作, 通过 这些工具的组合可以完成各种各样的, 不同的任务. 如: ls, sort, hea ...

  2. ls 显示目录下的内容和文件相关属性信息

    1.命令功能 ls命令是“list directory contents”,显示当前目录下的内容和文件属性. 2.语法格式 ls  [option]  file ls  选项  文件名 3.选项说明 ...

  3. Linux 只显示目录或者文件方法

    ls 参数 -a 表示显示所有文件,包含隐藏文件-d 表示显示目录自身的属性,而不是目录中的内容-F 选项会在显示目录条目时,在目录后加一个/ 只显示目录 方法一: find . -type d -m ...

  4. tomcat 虚拟目录与显示目录中文件列表

    虚拟目录: 该方法推荐使用,比较简单. 在%tomcat%\conf\Catalina\localhost(该目录可能需要手工创建)下新建一个文件abc.xml,注意文件名中的abc就表示虚拟目录的名 ...

  5. C++ 多目录多文件编译 技巧

    http://www.cplusplus.com/forum/articles/10627/ 1.hpp文件 hpp文件可以使用template函数和class静态函数(不含静态成员) a)不可包含全 ...

  6. linux 目录与文件命令

    目录与文件常用命令 1.cd命令 cd [相对路径或绝对路径或特殊符号] 功用:变换目录 ps: 不加参数时,默认切换到用户主目录,即环境变量HOME指定的目录,如root用户的HOME变量为/roo ...

  7. Linux命令应用大词典-第4章 目录和文件操作

    4.1 pwd:显示(打印)当前工作目录路径 4.2 cd:更改工作目录路径 4.3 ls: 列出目录和文件信息: 4.4 dir:列出目录或文件信息: 4.5 dirs:显示目录列表: 4.6 to ...

  8. linux 系统统计目录下文件夹的大小

    du -ah --max-depth=1     这个是我想要的结果  a表示显示目录下所有的文件和文件夹(不含子目录),h表示以人类能看懂的方式,max-depth表示目录的深度. du命令用来查看 ...

  9. ls - 列出目录清单信息

    ls - list directory contents 列出目录内容 格式: ls [OPTION]... [FILE]... 常用选项: -a:显示所有文件或目录(包括隐藏目录和.(当前目录),. ...

随机推荐

  1. APIO2014 爆零总结

    真心爆零 不要不服 这次apio给了一种新的赛制 看上去很好? 所有人都可以在线提交 并且实时知道自己的分数 它对每个题目分成若干分数段 每个分数段有若干数据 要获得这个分数段的分数需要通过这个分数段 ...

  2. 生成500个0-1000的随机数&&数组查找—小练习

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. 轻松学习Linux之理解Shell的硬链接与软连接

     大家在学习linux的过程中常常遇到一些模糊且容易混淆的概念比如什么是硬链接和软链接,他们有什么区别?  软连接有点象windows中的快捷方式,连接和目标文件具有相同的节点,而硬连接就好象重新复制 ...

  4. HTML5每日一练之figure新标签的应用

    igure元素是一种元素的组合,可带有标题(可选).figure标签用来表示网页上一块独立的内容,将其从网页上移除后不会对网页上的其他内容产生影响.figure所表示的内容可以是图片.统计图或代码示例 ...

  5. visualC/C++连接MySql数据库

    vs连接数据库其实就是将mysql数据库.h头文件接口.lib链接文件和dll执行文件加入到项目中.下面是配置如何加入. 转于http://www.cnblogs.com/justinzhang/ar ...

  6. MySQL主从复制的原理及配置

    [http://www.jb51.net/article/50053.htm]   MySQL 数据库的高可用性架构:         集群,读写分离,主备.而后面两种都是通过复制来实现的.下面将简单 ...

  7. DbHelperSQL和Dapper数据访问的性能对比

    http://www.cnblogs.com/finesite/archive/2012/08/23/2652491.html

  8. window.print打印指定div

    window.print可以打印网页,但有时候我们只希望打印特定控件或内容,怎么办呢? 首先我们可以把要打印的内容放在div中,然后用下面的代码进行打印. <html> <head& ...

  9. 转载:Flash AS3.0 加载外部资源(图片,MP3,SWF)的两种方式

    Flash AS3.0 加载外部资源(图片,MP3,SWF)的两种方式 出自:http://www.cnblogs.com/top5/archive/2012/08/04/2623464.html 关 ...

  10. iOS开发-关于网络状态的判断

    在判断网络状态这个问题上,苹果提供了一个叫Reachability的第三方库,但是这个库并不能真正的检测我们的网络状态,我也是在调试程序的时候发现的.详情可以阅读这个博客http://blog.csd ...