使用“剪切”修剪一串文件权限

时间:2014-11-16 04:49:09

标签: linux bash awk grep cut

我正在尝试从权限字符串中删除该组和所有用户。例如-rwxr-xr-x我希望它为-rwx,然后取消前导破折号rwx

现在我通过以下代码获取权限字符串:filePerms=$(stat --format=%A $path)其中$path只是文件的任何目录。

这里我尝试使用cut来摆脱第4个角色和filePermsTest=$(cut -c1- $filePerms),但是我得到了这个错误:

cut: invalid option -- 'r'
Try 'cut --help' for more information.
59M   2014-03-21 19:25   -rw-r--r--   ./old/VMwareTools-9.6.2-1688356.tar.gz

以下是我尝试使用的cut命令的一部分:N- from N'th byte, character or field, to end of line

这里的参考是我的代码的正常输出(这与问题没什么关系。它只是为了给你一个正在发生的事情以及如何使用它的参考)

Size   Date      Time     Permissions   File
--------------------------------------------------------
59M   2014-03-21 19:25   -rw-r--r--   ./old/VMwareTools-9.6.2-1688356.tar.gz
9.2M   2014-03-21 19:24   -rw-r--r--   ./old/vmware-tools-distrib/lib/icu/icudt44l.dat
7.6M   2013-07-07 21:21   -rwxr-xr-x   ./old/Sublime Text 2/sublime_text
4.8M   2014-08-26 23:51   -rwxrwxr-x   ./old/sublime_text_3/sublime_text

我认为部分权限字符串被视为参数。

2 个答案:

答案 0 :(得分:2)

尝试stat --format=%A filename | cut -c 2-4

这会选出你想要的第二到第四个字符。

答案 1 :(得分:0)

使用awk的substr函数删除特定列中的某些字符。

command | awk 'NR>2{$4=substr($4,2,3)}1'

示例:

$ cat file
Size   Date      Time     Permissions   File
--------------------------------------------------------
59M   2014-03-21 19:25   -rw-r--r--   ./old/VMwareTools-9.6.2-1688356.tar.gz
9.2M   2014-03-21 19:24   -rw-r--r--   ./old/vmware-tools-distrib/lib/icu/icudt44l.dat
7.6M   2013-07-07 21:21   -rwxr-xr-x   ./old/Sublime Text 2/sublime_text
4.8M   2014-08-26 23:51   -rwxrwxr-x   ./old/sublime_text_3/sublime_text
$ awk 'NR>2{$4=substr($4,2,3)}1' file
Size   Date      Time     Permissions   File
--------------------------------------------------------
59M 2014-03-21 19:25 rw- ./old/VMwareTools-9.6.2-1688356.tar.gz
9.2M 2014-03-21 19:24 rw- ./old/vmware-tools-distrib/lib/icu/icudt44l.dat
7.6M 2013-07-07 21:21 rwx ./old/Sublime Text 2/sublime_text
4.8M 2014-08-26 23:51 rwx ./old/sublime_text_3/sublime_text