我可以在 ls -l 命令中显示某些列吗?

我可以在 ls -l 命令中显示某些列吗?

我想仅显示具有写权限的目录或文件。我尝试这样做:

ls -l | cut -f 1,9 | egrep "w"

但 cut 用于文件,而我不想创建一个。此外,它会显示名称中含有该字符的文件。

谢谢

答案1

的输出ls -l以权限结构为前缀,格式为咕咕咕咕, 在哪里:

  • 是文件类型指示符(d对于目录)

  • 呜呜呜是三个字符,指定文件所有者权限

  • 胶原蛋白是指定组权限的三个字符

  • 欧亚是三个字符指定其他权限

    这三个角色分别是读写为了

  • r- 读

  • - 写

  • X- 执行

  • 如果缺少许可,则-将取代

检查目录权限

鉴于此,我们可以构造一个正则表达式来查找以以下字符串开头的权限字符串d并且有在第三个位置(测试目录所有者是否有写权限):

ls -l | egrep -h ^d.w

要检查组或其他权限,只需调整正则表达式:

  • 检查组写权限:^d....w
  • 检查其他写权限:^d.......w

检查文件权限

更换d在正则表达式中-

  • 所有者写权限:^-.w
  • 组写权限:^-....w
  • 其他写权限:^-.......w

检查目录或文件

放一个在之后的位置^

  • 所有者写权限:^..w
  • 组写权限:^.....w
  • 其他写权限:^........w

常用表达

一个在构建正则表达式时测试它们的好网站是正则表达式 101

答案2

如果ls只选择目录,则使用ls -d,但是它不太擅长选择可写的目录。

一个更好的工具是 寻找,您可以按如下方式使用:

find /path/to/folder -type d -writable

-type d参数将仅选择目录,正如-writable它所说的那样。

相关内容