Bash
使用空格列出有關文件/目錄的資訊
我正在嘗試使用 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)
手冊頁,了解可以在格式字元串中放入的內容。