ls如何只显示文件名
(2012-04-20 10:00:21)
标签:
it |
分类: linux |
http://hi.baidu.com/zaoyuan1217/blog/item/fd69575660366b4fd10906b9
|
要列出当前目录下所有的文件名和目录名直接使用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]或者 -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这一部分,
二、此方法的漏洞分析和正确的方法(可能) ls -F:根据文件、目录等信息在文件名或目录名最后给予附加数据结构,例如: *代表可执行文件;/代表目录;=代表socket文件;|代表FIFO文件;@代表连接文件 最后给出linux下正确的只列出当前目录下文件名的方法如下: 在我们的例子中执行这个命令的输出如下: linux下正确的只列出当前目录下目录名的方法 1、一般情况下可使用 ls -l | grep
^d 2、若目录名中有空格,可使用ls -F | grep
[/$],不能写成 ls -F | grep
[*/$], 3、一个最简单的方法,使用 ls -d
*/,可以达到与方法2相同的效果,如 sed 's/old/new/g':以行为单位进行查找替换,注意:要删除“/”需要使用转义字符。 |

加载中…