Ls

如何列出 *.tar.gz,每行一個文件名?

  • November 29, 2018

我試圖列出每個.tar.gz文件,只使用以下命令:

ls *.tar.gz -l

…它向我顯示了以下列表:

-rw-rw-r-- 1 osm osm  949 Nov 27 16:17 file1.tar.gz
-rw-rw-r-- 1 osm osm  949 Nov 27 16:17 file2.tar.gz

但是,我只需要以這種方式列出它:

file1.tar.gz 
file2.tar.gz

也不是:

file1.tar.gz file2.tar.gz

這是如何“正確”完成的?

-1選項(數字“one”,而不是小寫“L”)將每行列出一個文件,沒有其他資訊:

ls -1 -- *.tar.gz

如果您只需要文件名,您可以使用printf

printf '%s\n' *.tar.gz

…外殼會將*.tar.gz萬用字元擴展為文件名,然後printf將它們列印出來,每個後跟一個換行符。此輸出與嵌入換行符的文件名的輸出略有不同:ls

設置

$ touch file{1,2}.tar.gz
$ touch file$'\n'3.tar.gz

ls

$ ls -1 -- *.tar.gz
file1.tar.gz
file2.tar.gz
file?3.tar.gz

列印

$ printf '%s\n' *.tar.gz
file1.tar.gz
file2.tar.gz
file
3.tar.gz

引用自:https://unix.stackexchange.com/questions/484481