我只需要在目錄中找到具有使用ls的擴展名的文件(不能使用find)。只使用ls找到帶擴展名的文件
我試過ls *。*,但是如果dir不包含任何擴展名的文件,它會返回「沒有這樣的文件或目錄」。
我不想要那個錯誤,並且想讓ls返回到cmd提示符,如果有擴展名的文件。
我試圖使用gre與ls來實現相同。
ls | grep「*。*」 - 不起作用 但是ls | grep「\」。作品。
我不知道爲什麼grep *。*不起作用。任何幫助表示讚賞!
謝謝!
我只需要在目錄中找到具有使用ls的擴展名的文件(不能使用find)。只使用ls找到帶擴展名的文件
我試過ls *。*,但是如果dir不包含任何擴展名的文件,它會返回「沒有這樣的文件或目錄」。
我不想要那個錯誤,並且想讓ls返回到cmd提示符,如果有擴展名的文件。
我試圖使用gre與ls來實現相同。
ls | grep「*。*」 - 不起作用 但是ls | grep「\」。作品。
我不知道爲什麼grep *。*不起作用。任何幫助表示讚賞!
謝謝!
理解shell模式和正則表達式之間的區別很重要。殼模式有點簡單,但不夠靈活。 grep使用正則表達式匹配。像
*.*
甲殼圖案將與正則表達式來完成作爲
.*\..*
但在grep的正則表達式不固定的,這意味着它搜索的匹配就行的任何地方,使兩個.*
部件不必要。
我認爲正確的解決辦法是這樣的:
(shopt -s nullglob ; echo *.*)
這是一個有點冗長,但它永遠是可行的,不管你有什麼樣時髦的文件名。 (帶管道ls
到grep
的問題是,典型的系統允許在文件名中確實離奇字符,包括,例如,換行。)
的shopt -s nullglob
部分啓用(「小號 ETS」)的nullglob
SH ELL 選擇選項,它告訴Bash如果沒有文件的名稱匹配*.*
,那麼*.*
應該被刪除(即應該擴展爲無),而不是單獨放置。
圓括號(...)
要設置子shell,所以nullglob
選項僅對腳本的這一小部分啓用。
嘗試
ls -1 | grep "\."
名單隻有具有擴展和無(空單)文件,如果沒有文件:喜歡你的需要。
使用Linux grep,您可以添加-v來獲取不帶擴展名的列表文件。
'ls | grep'\。'' – 2013-04-08 03:51:45
是的,正如上面提到的那樣。你能解釋它爲什麼會這樣做,爲什麼\ *。\ *不會? – 2013-04-08 03:53:16
'ls *。{mp3,exe,mp4}' 這個問題應該有所幫助:http:// stackoverflow。com/questions/1447625/list-files-with-certain-extensions-with-ls-and-grep – 2013-04-08 03:53:52