Answers:
几乎可以..
ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/) \
*2^(8-i));if(k)printf("%0o ",k);print}'
chmod 777 dir
您的命令将权限打印为767
stat
假设您知道要查找的文件,我能想到的就是(保持简单)。如果不这样做,*
可以找到其中的大多数:
/usr/bin$ stat -c '%a %n' *
755 [
755 a2p
755 a2ps
755 aclocal
...
它开箱即用地处理粘性,suid和company:
$ stat -c '%a %n' /tmp /usr/bin/sudo
1777 /tmp
4755 /usr/bin/sudo
stat -f '%A %N' *
在Mac(FreeBSD)上做同样的事情
stat
是不是ls
这样的说法,所以这不是正确的答案。但是,我相信这是期望输出的正确答案。如果awk
允许在管道中,find
则应允许在何处stat
调用-exec
;那么您可以stat
直接使用而无需使用*
stat -c '%a %n' * **/*
。
您可以只使用GNU查找。
find . -printf "%m:%f\n"
-maxdepth 1
选项,否则它将遍历整个目录树。
您可以使用以下命令
stat -c "%a %n" *
您也可以使用filename
或directoryname
代替*
以获得特定结果。
在Mac上,您可以使用
stat -f '%A %N' *
stat: illegal option -- c
usage: stat [-FlLnqrsx] [-f format] [-t timefmt] [file ...]
man stat
macOS 10.14.4中提供的信息,则命令应为stat -f "%Lp %N" *
。%Lp
似乎打印与相同的东西%A
。
@MYYN
哇,真好!但是suid,sgid和粘性位又如何呢?
您必须使用s和t扩展您的过滤器,否则它们将不计数并且您将得到错误的结果。要计算此特殊标志的八进制数,过程相同,但索引位于4 7和10。对于设置了执行位的文件,可能的标志是---s--s--t
amd;对于没有设置执行位的文件,其可能标志是---S--S--T
ls -l | awk '{
k = 0
s = 0
for( i = 0; i <= 8; i++ )
{
k += ( ( substr( $1, i+2, 1 ) ~ /[rwxst]/ ) * 2 ^( 8 - i ) )
}
j = 4
for( i = 4; i <= 10; i += 3 )
{
s += ( ( substr( $1, i, 1 ) ~ /[stST]/ ) * j )
j/=2
}
if ( k )
{
printf( "%0o%0o ", s, k )
}
print
}'
测试:
touch blah
chmod 7444 blah
将导致:
7444 -r-Sr-Sr-T 1 cheko cheko 0 2009-12-05 01:03 blah
和
touch blah
chmod 7555 blah
会给:
7555 -r-sr-sr-t 1 cheko cheko 0 2009-12-05 01:03 blah
alias "lsmod=ls -al|awk '{k=0;s=0;for(i=0;i<=8;i++){;k+=((substr(\$1,i+2,1)~/[rwxst]/)*2^(8-i));};j=4;for(i=4;i<=10;i+=3){;s+=((substr(\$1,i,1)~/[stST]/)*j);j/=2;};if(k){;printf(\"%0o%0o \",s,k);};print;}'"
使用它来显示Unix数字权限值(八进制值)和文件名。
stat -c '%a %n' *
使用此选项可显示Unix数字权限值(八进制值)以及文件夹的sgid和粘性位,所有者的用户名,组名,总大小(以字节为单位)和文件名。
stat -c '%a %A %U %G %s %n' *
添加%y
如果你需要在人类可读的格式最后修改时间。有关更多选项,请参见stat。
使用别名的更好版本
使用别名是完成所需内容的更有效方法,并且还包括颜色。以下内容首先显示按组目录组织的结果,以彩色显示,以人类可读格式(例如1K 234M 2G)打印尺寸编辑您~/.bashrc
的帐户,并通过编辑为您的帐户或全局添加别名/etc/profile.d/custom.sh
键入将cls
显示新的LS命令结果。
alias cls="ls -lha --color=always -F --group-directories-first |awk '{k=0;s=0;for(i=0;i<=8;i++){;k+=((substr(\$1,i+2,1)~/[rwxst]/)*2^(8-i));};j=4;for(i=4;i<=10;i+=3){;s+=((substr(\$1,i,1)~/[stST]/)*j);j/=2;};if(k){;printf(\"%0o%0o \",s,k);};print;}'"
文件夹树
在编辑bashrc或custom.sh时,请包含以下别名以查看图形表示,其中键入lstree
将显示您当前的文件夹树结构
alias lstree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'"
它会显示:
|-scripts
|--mod_cache_disk
|--mod_cache_d
|---logs
|-run_win
|-scripts.tar.gz
alias cls="ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr(\$1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(\"%0o \",k);print}'"