日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

linux只显示文件,ls如何只显示文件名

發(fā)布時(shí)間:2025/4/16 67 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux只显示文件,ls如何只显示文件名 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

要列出當(dāng)前目錄下所有的文件名和目錄名直接使用ls命令即可。

但如何只列出文件名而不列出目錄呢?

查遍了ls 的幫助,也沒看到有這個(gè)現(xiàn)成的選項(xiàng)。

幸好這個(gè)問題還是比較常見的,網(wǎng)上已經(jīng)有了一些解答,但實(shí)驗(yàn)之后,我發(fā)現(xiàn)看到的幾個(gè)鏈接給出的解決方法都是不完全正確的。具體如下。

一、網(wǎng)上流傳的解法

首先,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

可以看到,文件和目錄的區(qū)別在于第一列是d還是-。這就需要在ls的基礎(chǔ)上使用grep命令來對(duì)ls輸出的每一行進(jìn)行過濾。進(jìn)一步使用ls

-l | grep ^[^d]或者ls

-l | grep -v ^d命令得到如下結(jié)果:

-rw-r--r-- 1 junfeng junfeng 103 2009-11-26 13:35

CMakeLists.txt

現(xiàn)在目錄被過濾掉了。grep ^[^d]中,^[^d]

是一個(gè)正則表達(dá)式,[^d]表示字符串含有一個(gè)不是d的字符,^d表示以d開頭,^[^d]表示不以d開頭。

但有時(shí)候只需要獲得文件名,需要進(jìn)一步排除權(quán)限,日期等信息,那么再進(jìn)一步加入awk命令。

ls -l |

grep ^[^d] | awk '{print $8}'

結(jié)果如下:

CMakeLists.txt

重新觀察之前的結(jié)果

-rw-r--r-- 1 junfeng junfeng 103 2009-11-26 13:35

CMakeLists.txt

awk '{print $8}' 中

數(shù)字8的含義是第8列(列和列之間以空格符分割),也就是文件名CMakeList.txt這一部分,

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

上述方法有一個(gè)重要的漏洞,那就是使用了awk '{print

$8}'命令。前面提到這個(gè)命令是以空格符來判斷列和列的分隔的。那么如果文件名中就包含空格會(huì)怎么樣呢

繼續(xù)實(shí)驗(yàn)一下。 運(yùn)行touch "f ile"創(chuàng)建一個(gè)名為"f ile"的文件。注意文件名中的空格。

再重新運(yùn)行

ls -l |

grep ^[^d] | awk '{print $8}'

結(jié)果如下:

CMakeLists.txt

f

果然得到了錯(cuò)誤的結(jié)果。

仔細(xì)閱讀文檔,發(fā)現(xiàn)一個(gè)可行而且比較簡(jiǎn)便的方法:

ls -1 -F |

grep -v [/$]

解釋如下:

ls -1 ,

注意這里是數(shù)字1,作用是單列輸出。

ls

-F:根據(jù)文件、目錄等信息在文件名或目錄名最后給予附加數(shù)據(jù)結(jié)構(gòu),例如:

*代表可執(zhí)行文件;/代表目錄;=代表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/

可見目錄項(xiàng)的結(jié)尾被添加了 '/' 字符。這樣便能夠簡(jiǎn)單的區(qū)分目錄和文件了。

而 grep -v

[/$],[/$]表達(dá)式匹配的是以'/'結(jié)尾的字符串,而-v選項(xiàng)則是排除這些匹配的字符串。

最后給出linux下正確的只列出當(dāng)前目錄下文件名的方法如下:ls

-1 -F | grep - v[/$]

在我們的例子中執(zhí)行這個(gè)命令的輸出如下:

CMakeLists.txt

f ile

linux下正確的只列出當(dāng)前目錄下目錄名的方法

1、一般情況下可使用 ls -l | grep

^d?,若只列出目錄名: ls -l | grep ^d | awk '{print

$8}'

2、若目錄名中有空格,可使用ls -F | grep

[/$],不能寫成 ls -F | grep

[*/$],?[*/$]表示以*或者/結(jié)尾都可以

3、一個(gè)最簡(jiǎn)單的方法,使用 ls -d

*/,可以達(dá)到與方法2相同的效果,如?ls -d /boot | sed

's/\///g'

sed

's/old/new/g':以行為單位進(jìn)行查找替換,注意:要?jiǎng)h除“/”需要使用轉(zhuǎn)義字符。

總結(jié)

以上是生活随笔為你收集整理的linux只显示文件,ls如何只显示文件名的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。