linux命令:ls命令只列出目录名或只列出文件名的正确方法

要列出当前目录下所有的文件名和目录名直接使用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/*/,列出/boot/下的目录名,显示结果为/boot/grub/

4、方法2与方法3可以避免目录名中有空格,但列出的目录名最后有一个“/”,若想删除最后的那个"/",可使用sed命令做如下处理,以方法3为例,

ls -d /boot/*/ | sed 's/\///g'  

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


原始地址:http://hi.baidu.com/iovsdplqyybgrwq/item/666923595795ae9c8c12edb2

转载于:https://blog.51cto.com/tengluoyue/1344729

linux 命令:ls命令相关推荐

  1. linux中ls命令

    linux中ls命令应该用的很多了,列出当前路径下的文件和目录ls 查看目录中的文件          ls -F 查看目录中的文件          ls -l 显示文件和目录的详细资料      ...

  2. python idls_Python argparse模块实现模拟 linux 的ls命令

    python 模拟linux的 ls 命令 sample: python custom_ls.py -alh c:/ 选项: -a ,--all 显示所有文件,包括'.'开头的隐藏文件 -l  列表显 ...

  3. linux命令ls什么意思,ls是什么意思(精通 Linux 的 ls 命令)

    ls是什么意思(精通 Linux 的 ls 命令) Linux 的 ls 命令拥有数量惊人的选项,可以提供有关文件的重要信息. -- Seth Kenlon(作者) ls 命令可以列出一个 POSIX ...

  4. Linux下 ls 命令的高级用法8例

    Linux下 ls 命令的高级用法8例 在Linux下,ls这个命令大家肯定太熟悉了,良许相信只要是Linux工程师,每天都会离不开这个命令,而且一天会使用个几百次.但是,除了 ls -l 以外,你还 ...

  5. Linux命令 - ls命令

    Linux命令 - ls命令   ls命令是linux下最常用的命令.ls命令就是list的缩写,用来打印出当前目录的清单.如果ls指定其他目录,那么就会显示指定目录里的文件及文件夹清单. 通过ls ...

  6. linux中ls命令意思,linux中的ls命令的详细解释

    linxu下的ls命令是用来显示目标列表的.下面由学习啦小编为大家整理了linux的ls命令的详细解释的相关知识,希望对大家有帮助! 一.linux中的ls命令的详细解释 ls命令 ls命令用来显示目 ...

  7. mysql ls命令,Linux 常用 ls命令详解

    ls命令是linux常用命令之一,用于在命令控制台提示符中列出目录和文件信息. 一.ls命令用法: ls命令运行在命令提示符终端,用法如下.其中[选项]和为可选参数,可以一零个或者多个选项:[文件]也 ...

  8. linux输入ls命令报错,Linux命令基础2-ls命令

    本文介绍的是linux中的ls命令,ls的单词是list files的缩写,意思的列出目录文件. 首先我们在admin用户的当前路径,新建一个test的文件夹,为了方便本文操作和介绍,创建了不同文件类 ...

  9. linux的ls命令详解

    概述 Linux ls命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录). 语法 ls [-alrtAFR] [name...] 参数 -a 显示所有文件及目录 (ls内定将文件名 ...

  10. linux ls使用方法,Linux/Ubuntu ls命令详解使用格式和方法

    烈火建站学院文档 ls命令是Linux/Ubuntu中用来查看所选目录下有哪些文件以及列出当前目录中子目录的清单的命令,是Linux/Ubuntu中经常用到的一个命令,也是一个非常基本的命令.在很多操 ...

最新文章

  1. php 伪静态 page-18.html,PHP 伪静态实现技术原理讲解
  2. 清晰易懂的Numpy入门教程
  3. 激活用户并让他留下,仅是“活下去”的第一步
  4. ultraEdit-32 PHP/HTML智能提示
  5. oracle索引中丢失in或out参数,oracle 11g给表建触发器错误“索引中丢失 IN 或 OUT 参数:: 1...
  6. cello 有关trigger
  7. 华硕t100ta做linux,华硕T100TA个人补充评测
  8. java蓝桥杯 试题-基础练习-十六进制转八进制
  9. LintCode 1671. 玩游戏(贪心、难)
  10. 计算机网络之传输层:1、概述(传输层功能、端口号、套接字、TCP、UDP)
  11. 图论——P问题、NP问题、NPC问题、NP-hard问题
  12. 3D呈现transform-style(CSS3)
  13. WAMP(windows+apache+mysql+php)
  14. 漳州华为云计算机,漳州市云主机托管
  15. Python帮助文件下载使用
  16. 河北省第三届研究生数学建模B题(二等)交通检测器数据质量控制及预测
  17. 2 测试方法与理论 - 软件测试
  18. 查询数据库各种历史记录
  19. 五路循迹传感器的优点_对于安装五路循迹传感器的机器人来说,如果五个传感器都遇到黑线,说明机器人的状态是()。...
  20. 创建链表:头插法与尾插法

热门文章

  1. 设计模式复习-抽象工厂模式
  2. 【Groovy】闭包 Closure ( 闭包类 Closure 简介 | 闭包 parameterTypes 和 maximumNumberOfParameters 成员用法 )
  3. 【Android 逆向】函数拦截原理 ( 通过修改 GOT 全局偏移表拦截函数 | 通过在实际被调用的函数中添加跳转代码实现函数拦截 )
  4. 【开发环境】Mac 中 IntelliJ IDEA 运行 Python 程序 ( 安装 Python Community Edition 插件 )
  5. 【Google Play】Google Play 开放式测试 ( 简介 | 发布开放式测试版本 )
  6. 【Android 内存优化】自定义组件长图组件 ( 自定义组件构造方法 )
  7. idea创建一个SpringBoot项目
  8. 二叉树的深度优先遍历和广度优先遍历
  9. 洛谷P1466 集合 Subset Sums
  10. 对象及变量的并发访问一