Pipe

以相反的順序對目錄列表進行排序

  • April 21, 2021

我正在嘗試按字母倒序對目錄列表進行排序。

為什麼我得到一個隨機訂單?

   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以獲取最舊(最近最少修改)的文件。

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