ls -la | awk 'BEGIN {printf "%s\t%s\n","Name","Size"}{if ($9 == "." && $5 == 0) print $9,"\t"$5}'
drwxrws--- 6 rsy512 group20 4096 Oct 24 20:54 .
drwxrws--- 6 root group20 68 Oct 24 14:19 ..
-rwxrw----. 1 rsy512 group20 568 Mar 3 2010 adhoc
-rw-r-----. 1 rsy512 group20 0 Mar 3 2010 .ghost1.c
-rw-r-----. 1 rsy512 group20 0 Mar 3 2010 .ghost2
-rw-r-----. 1 rsy512 group20 0 Mar 3 2010 .ghost3.cpp
drwxr-s--- 2 rsy512 group20 6 Mar 3 2010 .ghostdir
-rwxrw----. 1 rsy512 group20 21 Feb 17 2010 input4.txt
-rwxrw----. 1 rsy512 group20 1878 Feb 26 2008 lab1.cpp
-rwxrw----. 1 rsy512 group20 1171 Feb 4 2010 Lab2.cpp
-rwxrw----. 1 rsy512 group20 1013 Mar 3 2010 proc
-rwxrw----. 1 rsy512 group20 109 Mar 3 2010 prog1.c
-rwxrw----. 1 rsy512 group20 104 Mar 3 2010 prog2.c
-rwxrw----. 1 rsy512 group20 0 Mar 3 2010 prog3.c.txt
-rwxrw----. 1 rsy512 group20 0 Mar 3 2010 prog.4c
drwxrws--- 2 rsy512 group20 6 Mar 3 2010 programs.c
drwxrws--- 2 rsy512 group20 6 Mar 3 2010 programs.cpp
-rw-rw----. 1 rsy512 group20 46 Oct 24 20:54 script1_t20
drwxrws--- 2 rsy512 group20 6 Mar 3 2010 test1
我需要輸出 3 個檔案“.ghost...”及其檔案大小。帶有標題名稱和大小。
我試圖使用邏輯 AND (&&) 來實作這種效果。只有滿足這兩個條件后,才能繼續列印資訊。在結果中添加標題“名稱”、“大小”。將此 awk 腳本(以 ls -l | 開頭)添加到 script1_tXX 的內容中
uj5u.com熱心網友回復:
讓你的ls -la輸出是
drwxrws--- 6 rsy512 group20 4096 Oct 24 20:54 .
drwxrws--- 6 root group20 68 Oct 24 14:19 ..
-rwxrw----. 1 rsy512 group20 568 Mar 3 2010 adhoc
-rw-r-----. 1 rsy512 group20 0 Mar 3 2010 .ghost1.c
-rw-r-----. 1 rsy512 group20 0 Mar 3 2010 .ghost2
-rw-r-----. 1 rsy512 group20 0 Mar 3 2010 .ghost3.cpp
drwxr-s--- 2 rsy512 group20 6 Mar 3 2010 .ghostdir
-rwxrw----. 1 rsy512 group20 21 Feb 17 2010 input4.txt
-rwxrw----. 1 rsy512 group20 1878 Feb 26 2008 lab1.cpp
-rwxrw----. 1 rsy512 group20 1171 Feb 4 2010 Lab2.cpp
-rwxrw----. 1 rsy512 group20 1013 Mar 3 2010 proc
-rwxrw----. 1 rsy512 group20 109 Mar 3 2010 prog1.c
-rwxrw----. 1 rsy512 group20 104 Mar 3 2010 prog2.c
-rwxrw----. 1 rsy512 group20 0 Mar 3 2010 prog3.c.txt
-rwxrw----. 1 rsy512 group20 0 Mar 3 2010 prog.4c
drwxrws--- 2 rsy512 group20 6 Mar 3 2010 programs.c
drwxrws--- 2 rsy512 group20 6 Mar 3 2010 programs.cpp
-rw-rw----. 1 rsy512 group20 46 Oct 24 20:54 script1_t20
drwxrws--- 2 rsy512 group20 6 Mar 3 2010 test1
然后
$9 == "."
確實檢查整個第 9 個欄位是否只是點,此條件僅適用于您的輸出中的一行,ls -la即
drwxrws--- 6 rsy512 group20 4096 Oct 24 20:54 .
但你想
輸出 3 個檔案“.ghost...”
所以你應該在第 9 個欄位內尋找.ghost某個地方,例如,這可能表示為
$9 ~ /\.ghost/
請注意,.需要轉義以表示文字點,以上條件適用于行
-rw-r-----. 1 rsy512 group20 0 Mar 3 2010 .ghost1.c
-rw-r-----. 1 rsy512 group20 0 Mar 3 2010 .ghost2
-rw-r-----. 1 rsy512 group20 0 Mar 3 2010 .ghost3.cpp
drwxr-s--- 2 rsy512 group20 6 Mar 3 2010 .ghostdir
如果你想排除目錄,你可以通過添加條件來做到這一點
!/^d/
這可能被讀作行不 ( !) 以 ( ^) 字符開頭d,因此完整條件可能寫為
!/^d/ && $9 ~ /\.ghost/ && $5 == 0
這確實適用于
-rw-r-----. 1 rsy512 group20 0 Mar 3 2010 .ghost1.c
-rw-r-----. 1 rsy512 group20 0 Mar 3 2010 .ghost2
-rw-r-----. 1 rsy512 group20 0 Mar 3 2010 .ghost3.cpp
免責宣告:這假設您從不在檔案名中使用任何空格。
(在 gawk 4.2.1 中測驗)
uj5u.com熱心網友回復:
您可以使用 進行所需的過濾find,不確定列印 0 尺寸是否可以,但就是這樣。
$ { echo -e "name\tsize"; find . -type f -name ".*" -size 0 -printf "%p\t%k KB\n"; } |
column -ts$'\t'
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/519928.html
