在列出目录时,是否可以查看数字Unix权限,如644,而不是符号输出-rw-rw-r——?

谢谢。


当前回答

在阅读了这里的许多答案后,按照评论中提供的链接回到了最初的UNIX方法,在想要结合这里提供的内容以及我已经学到的技巧和技巧的同时,我提出了一个新的解决方案。

首先,我曾经使用这个别名,给我列标题:

alias l='echo "Dir Size|Perms|Link Count|Owner|Group|Size|Mod. Time|Name"; ls -haFl --time-style=long-iso --color=always --group-directories-first --format=long'

在将此与AWK结合后,我首先了解到我必须更改AWK命令,当使用ls的“-s”选项时,因为这显示了第一列的大小,然后需要读取和解析第二列数据(不再是第一列)。

我发现的问题是,当你提供输入“l”,即,你在一个路径,并键入:l,很好,但如果你键入“l”然后一个目录名怎么办?如果要列出子目录中的所有内容,该怎么办?这是不可能发生的,因为别名不处理输入。我可以用一个函数来处理这个。然后AWk崩溃了,我可以用一个子别名来处理。

两者的结合非常完美。

添加到我的。bashrc文件

function _bestLS() {
  echo 'MODE|Dir Size|Perms|Link Count|Owner|Group|Size|Mod. Time|Name';
  if [ "$*" == '' ]; then
     alias _awk4ls="awk '{k=0;s=0;for(i=0;i<=8;i++){;k+=((substr(\$2,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;}'";
     output=`ls -shaFl --time-style=long-iso --color=always -F --group-directories-first --format=long | _awk4ls`;
  else
     output=`ls -shaFl --time-style=long-iso --color=always -F --group-directories-first --format=long $* | _awk4ls`;
  fi
  echo "$output"
}
alias l="_bestLS"

观察(请注意,这是一个小写字母L,而不是数字1,在这个网站的字体看起来是一样的):

>>l

>>l [SOME DIRECTORY]

附注:请原谅我很长的(3行)提示(PS1)

其他回答

使用此命令显示Unix数字权限值(八进制值)和文件名。

stat -c '%a %n' *

使用此命令显示Unix数字权限值(八进制值)和文件夹的sgid和sticky位、所有者的用户名、组名、以字节为单位的总大小和文件名。

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

可以使用以下命令

stat -c "%a %n" *

此外,您可以使用任何文件名或目录名而不是*来获得特定的结果。

在Mac上,你可以使用

stat -f '%A %N' *

你可以使用GNU find。

find . -printf "%m:%f\n"

根据选择的答案和使用别名的建议,我将其转换为一个函数,以便将目录传递给list。

# ls, with chmod-like permissions and more.
# @param $1 The directory to ls
function lls {
  LLS_PATH=$1

  ls -AHl $LLS_PATH | 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}"
}

它几乎可以。

 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}'