답변:
거의 할 수 ..
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
...
그것은 끈적 끈적한, 수 이드 및 회사를 즉시 처리합니다.
$ stat -c '%a %n' /tmp /usr/bin/sudo
1777 /tmp
4755 /usr/bin/sudo
stat -f '%A %N' *
(FreeBSD의) 맥에 같은 일을
stat
아니기 ls
때문에 이것이 정답이 아니라고 생각합니다 . 그러나, 이것이 원하는 출력과 관련하여 정답이라고 생각합니다. awk
파이프에서 허용되는 경우 다음 에서 호출 find
되는 위치에서 허용되어야합니다 . 다음 없이 직접 사용할 수 있습니다stat
-exec
stat
*
stat -c '%a %n' * **/*
.
다음 명령을 사용할 수 있습니다
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
.
The
와, 좋은 awk! 그러나 suid, sgid 및 sticky는 어떻습니까?
s와 t를 사용하여 필터를 확장해야합니다. 그렇지 않으면 계산되지 않으며 잘못된 결과를 얻습니다. 이 특수 플래그의 8 진수를 계산하려면 프로시 저는 동일하지만 색인은 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 숫자 권한 값 (8 진수 값) 및 파일 이름을 표시하십시오.
stat -c '%a %n' *
이를 사용하여 Unix 숫자 권한 값 (8 진수 값)과 폴더의 sgid 및 sticky bit, 소유자의 사용자 이름, 그룹 이름, 바이트 단위의 총 크기 및 파일 이름을 표시하십시오.
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
의 오프 구축 선택 대답 과 별칭을 사용하는 제안 , 나는 목록에 디렉토리를 전달하는 것이 가능하도록하는 기능으로 변환됩니다.
# 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}"
}
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}'"