ls如何只显示文件名
2018-01-10 11:00
3943 查看
要列出当前目录下所有的文件名和目录名直接使用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 的帮助,也没看到有这个现成的选项。
幸好这个问题还是比较常见的,网上已经有了一些解答,但实验之后,我发现看到的几个链接给出的解决方法都是不完全正确的。具体如下。
一、网上流传的解法
首先,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':以行为单位进行查找替换,注意:要删除“/”需要使用转义字符。
相关文章推荐
- Java中文件选择器JFileChooser使用(如何设置默认文件名,并在框中显示)小结
- ls只显示文件名/只显示文件夹名
- sublime text3中中文件名显示为方框,如何解决?
- PUTTY登陆后,ls如何显示颜色
- 如何用js和css美化input file 按钮,并且显示上传的文件名
- 如何查看某个指定目录下的所有文件,只要显示其文件名,并把它输出
- 日志中如何显示.pc源文件的行数和文件名
- 如何更改Ubuntu下ls 显示的每种文件的颜色 与 备份vim
- 如何通过AttachmentsUseCaption参数来控制附件文件名和图标的显示
- dede5.7定义文件名“{pinyin} 拼音+文章ID”如何去掉文章ID,只显示拼音?
- JS:input上传如何获取文件名并显示在另一个文本框中
- 如何让文件夹内所有文件名显示在一个Excel文件
- 如何在 Linux/Unix 的 Bash 中打开或关闭 ls 命令颜色显示 | Linux 中国
- windows 如何不显示带点的文件名、文件夹?
- 如何修改linux中console下ls显示各种文件的颜色和vim中颜色
- find或grep如何在目录下查找字符串,并显示对应文件名
- 在vi中如何显示当前正在编辑的文件名(包括路径
- 如何使用Qt 4把ls命令的结果显示到GUI界面上去?-兼回答网友提问
- Linux 下 ls -l命令如何让文件大小以M或者K为单位来显示?加上-h
- ls 如何给文件名中数字排序