[英]Unix command ls -lrt giving unexpected results
因此,我正在做我的工作,我需要在文件夾中列出一些特定的文件。 我輸入ls -lrt *ABCD*201604*
,並返回*ABCD*201604* not found
。
然后,查看是否確實存在此類文件,我執行ls -lrt
並發現存在此類文件。
因此,接下來我在鍵入命令ls -lrt *ABCD*201604*
,從列出的文件中復制了ABCD
和201604
,並且成功了!
我比較了我的兩個命令,看是否做錯了,但發現兩者完全相同。 對這種行為有任何解釋嗎?
我寫的一則:
$ ls -lrt *RFPTDW*20160425*
*RFPTDW*20160425* not found
我復制的一個:
$ ls -lrt *RFPTDW*20160425*
RFPTDW107_01_01_20160425_1526.txt
RFPTDW059_01_01_20160425_1527.txt
在第二個輸出中,我省略了其他詳細信息,但文件名除外。
Shell負責在命令行上擴展glob。 執行的命令看不到那些通配符:它看到擴展的參數。
當您想查看它們的擴展方式時,請嘗試在想要的命令前加上echo
。 像這樣:
$ touch ABCD
$ touch 201604
$ touch foo_ABCD_bar_201604_baz
$ echo ls -lrt *ABCD*
ls -lrt ABCD foo_ABCD_bar_201604_baz
$ echo ls -lrt *201604*
ls -lrt 201604 foo_ABCD_bar_201604_baz
$ echo ls -lrt *ABCD*201604*
ls -lrt foo_ABCD_bar_201604_baz
$ rm foo_ABCD_bar_201604_baz
$ echo ls -lrt *ABCD*201604*
ls -lrt *ABCD*201604*
請注意,在最后一行,glob不再擴展為文件名,因此ls
命令將傳遞給參數*ABCD*201604*
,該參數命名了一個不存在的文件。
編輯:
如果您在實際命令前加上echo
,我希望您的結果將是
$ echo ls -lrt *RFPTDW*20160425*
ls -lrt *RFPTDW*20160425*
在第一種情況下,以及
$ echo ls -lrt *RFPTDW*20160425*
ls -lrt RFPTDW107_01_01_20160425_1526.txt RFPTDW059_01_01_20160425_1527.txt
在第二種情況下。 在第一種情況下,文件不存在,因此全局不會擴展到任何東西。 在第二種情況下,某些文件與glob匹配,因此shell可以對其進行擴展。
有時字符編碼是個問題。 Unicode中的某些字符看起來與ASCII字符完全相同(所謂的同形字符)。 因此,也許有些“特殊”字符僅在復制粘貼時才起作用。
同樣,有時很難區分ASCII字符,例如0-O(零,字母O)或1- l
(一個和字母L)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.