Pipe
以相反的順序對目錄列表進行排序
我正在嘗試按字母倒序對目錄列表進行排序。
為什麼我得到一個隨機訂單?
ls -l /usr/bin/ | sort -r
編輯:我必須使用命令排序。
您正在嘗試使用整個字元串作為鍵進行排序。
對象名稱寫在第 9 列,因此需要使用:
ls -l /usr/bin/ | sort -k9 -r
讓我們
ls
進行排序:ls -l -r /usr/bin
要不就
ls -lr /usr/bin
使其以與其他方式相反的順序對列表進行排序的標準
-r
選項。ls
如果您要求ls
使用 對修改時間戳進行排序-t
,-r
也會反轉該列表的順序,等等。您的命令管道對輸出的權限、所有權等進行排序
ls -l
,並且不會考慮文件名,除非兩個條目的所有其他資訊都相同。你沒有問這個問題,但是因為這是一件很常見的事情,而且通常是在詢問輸出排序之後的下一步
ls
……要實際從目錄列表中提取排序在前或後排序的文件名,請不要使用ls
,而是使用數組或位置參數:第一個文件名:
names=(/usr/bin/*) printf '%s\n' "${names[0]}"
或者
set -- /usr/bin/* printf '%s\n' "$1"
最後一個文件名:
names=(/usr/bin/*) printf '%s\n' "${names[-1]}"
或者
set -- /usr/bin/* shift "$(( $# - 1 ))" printf '%s\n' "$1"
同樣,獲取最近修改的文件(或目錄)的最佳方法
bash
是set -- /usr/bin/* newest=$1; shift for pathname do [ "$pathname" -nt "$newest" ] && newest=$pathname done printf 'Newest: %s\n' "$newest"
-nt
將測試更改為-ot
以獲取最舊(最近最少修改)的文件。