Bash

使用空格列出有關文件/目錄的資訊

  • October 10, 2012

我正在嘗試使用 ls 來獲取有關文件和目錄的資訊。只要文件/目錄有空格,我目前的命令就無法正確獲取名稱。

我正在使用它來列出目錄中的所有文件/目錄:

ls -al --time-style=+%s . | awk '{if ($7 != ".." && $7 != "." && $1 != "total") print $1"\t"$3"\t"$5"\t"$6"\t"$7}'

假設我的密碼“no-spaces-dir”、“some dir”、“some other dir”中有 3 個目錄,這將是輸出:

drwxr-xr-x.     testuser    4096    1349853378      no-space-dir
drwxr-xr-x.     testuser    4096    1349853387      some
drwxr-xr-x.     testuser    4096    1349853359      two

我要說這是我的 awk 部分的問題。所以 $7應該是目錄名,顯然我可以添加 $ 8 and $ 9 為我設置的範例獲得所需的輸出,但我可能並不總是知道一個目錄將只有 1 或 2 個空格..

如何保持這些其他資訊(文件/目錄權限、使用者、空間、時間戳)並在命令的輸出中獲取全名?

問題是 awk 正在使用空格作為欄位分隔符來解析輸入。當您將空格作為欄位的一部分時,這會帶來麻煩。

ls您可以使用stat(1)“dotglob”bash shell 選項來獲取所需的內容,而不是解析 的輸出。

shopt -s dotglob  # Enable * to match files starting with a dot
stat -c $'%A\t%U\t%s\t%Y\t%n' *

格式字元串以您想要的格式輸出您想要的欄位。指某東西的用途 $ ‘…’ allows the \t to be expanded to a tab. You could insert an actual tab character and drop the leading $ 如果你願意。

有關 dotglob 的詳細資訊,請閱讀bash(1)手冊頁,並註意 GLOBIGNORE。閱讀stat(1)手冊頁,了解可以在格式字元串中放入的內容。

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