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(&&)来达到这个效果。只有在两个条件都满足之后,才能继续打印信息。在结果中添加一个标题“Name”和“Size”。添加下面的awk脚本(前面加上ls -l|)到script1_tXX的内容
2条答案
按热度按时间lnvxswe21#
将的
ls -la
输出设为然后
会检查整个第9个字段是否为点,此条件仅适用于
ls -la
输出中的一行,即但是你想
输出3个文件“. ghost ...”
因此,您应该在第9个字段中查找
.ghost
,例如,可以将其表示为请注意,
.
需要转义为表示文字点,上述条件适用于行如果您希望排除目录,可以通过添加条件来实现
这可能被读作行不以(
^
)字符d
开始(!
),因此完成条件可能被写为这确实适用于
免责声明:这假定您从不在文件名中使用任何空格。
bvjxkvbb2#
你可以用
find
来做所需的过滤,不确定打印0大小是否可以,但它在这里。