我需要使用该命令列出目录中的一些文件ls
,但我还需要隐藏文件大小。我怎样才能用ls
命令做到这一点?
答案1
您可以使用以下方法将其屏蔽awk
:
$ ls -l | awk '{print $1, $2, $3, $4, $6, $7, $8, $9}'
例子
$ ls -l|awk '{print $1, $2, $3, $4, $6, $7, $8, $9}' | head -5
total 172136
drwxrwxr-x 2 saml saml Jan 16 2013 desktop-integration
-rw-r--r-- 1 saml saml Jan 16 2013 libobasis3.6-base-3.6.5.2-2.x86_64.rpm
-rw-r--r-- 1 saml saml Jan 16 2013 libobasis3.6-binfilter-3.6.5.2-2.x86_64.rpm
-rw-r--r-- 1 saml saml Jan 16 2013 libobasis3.6-calc-3.6.5.2-2.x86_64.rpm
细节
该awk
命令自动将数据解析为列,该命令告诉awk
打印除第五列之外的所有列,第五列是其中包含大小信息的列。
笔记:不过,我不建议这样做,我向您展示该方法只是为了向您展示如何通过管道传输到另一个工具(例如awk
.下一个方法是解决您的特定示例的首选方法!
更简洁的 awk 示例
感谢评论中的@val0x00ff,有一种更有效的方法来指示awk
打印除第五列之外的所有列。
例子
$ ls -l|awk '{$5=""; print}' | head -5
total 172136
drwxrwxr-x 2 saml saml Jan 16 2013 desktop-integration
-rw-r--r-- 1 saml saml Jan 16 2013 libobasis3.6-base-3.6.5.2-2.x86_64.rpm
-rw-r--r-- 1 saml saml Jan 16 2013 libobasis3.6-binfilter-3.6.5.2-2.x86_64.rpm
-rw-r--r-- 1 saml saml Jan 16 2013 libobasis3.6-calc-3.6.5.2-2.x86_64.rpm
细节
在此方法中,我们指示awk
通过将第五列设置为空字符串 来将其清空""
。其他一切都保持原样。然后我们告诉awk
打印剩下的结果字符串。
答案2
根据您的问题,我假设您的调用ls
是包含该选项的别名-l
。因此,一种方法是ls
不使用-l
上述选项,例如通过调用:
echo "call $(which ls)"
$(which ls)
另一种可能性是,您实际上想要使用该-l
选项,但不希望每次文件大小更改时都有不同的输出,在这种情况下,只有当您没有大小超过 1TB 的文件时,您才可以使用以下命令它通过报告所有文件的 1T 来隐藏真实的文件大小,并避免使用管道和其他命令:
ls -l --block-size=T
当然,如果您不介意使用管道并且想要使用awk
,请使用 @slm 发布的解决方案,感谢 @val0x00ff:
ls -l | awk '{$5=""; print}'