"ls -al" 명령 출력에서 ​​하드 링크 수를 제거합니다.

"ls -al" 명령 출력에서 ​​하드 링크 수를 제거합니다.

ls -al다음은 명령의 출력 입니다 .

total 280K
drwxrwxr-x 2 enan enan 4.0K Jun 28 09:59 ranger/
drwxrwxr-x 2 enan enan 4.0K Jun  8 23:26 scripts/
-rw-rw-r-- 1 enan enan   49 Jun  4 18:19 caps_to_ctrl.sh
-rw-rw-r-- 1 enan enan  739 Jun  4 18:19 cmus.theme
-rw-rw-r-- 1 enan enan 8.6K Jun  4 18:19 compton.conf
-rw-rw-r-- 1 enan enan 5.9K Jun 22 09:39 config
-rw-rw-r-- 1 enan enan  859 Jun 14 12:13 i3blocks.conf
-rw-rw-r-- 1 enan enan 4.7K Jun 14 12:13 init.el
-rw-rw-r-- 1 enan enan 8.7K Jun 28 11:22 init.vim
-rw-rw-r-- 1 enan enan  815 Jun 14 12:13 install.sh
-rwxrwxr-x 1 enan enan  142 Jun  4 18:19 lock.sh*
-rw-rw-r-- 1 enan enan 1.1K Jun 21 13:30 README.md
-rw-rw-r-- 1 enan enan 197K Jun 14 12:13 screenshot.png
-rw-rw-r-- 1 enan enan 1.2K Jun 20 21:51 Session.vim
-rw-rw-r-- 1 enan enan  427 Jun  9 13:46 tmux.sh

-rw-rw-r--파일 권한과 파일 소유자 사이에 숫자가 있음을 알 수 있습니다 enan. 이 숫자는 파일에 대한 하드 링크 수입니다. 어떤 경우에는 이를 출력에 표시하는 것이 유용할 수 있지만 지금은 필요하지 않으며 때때로 주의가 산만해집니다. ls -al지금은 필요하지 않으므로 출력에서 ​​마지막 수정 날짜를 제거하는 방법이 있음을 알 수 있습니다 .

그렇다면 ls -al명령 출력에서 ​​하드 링크 수를 어떻게 제거할 수 있습니까? 명령 출력에 하드 링크 수와 마지막 수정 날짜를 표시하는 것이 왜 중요합니까? 내 말은, 여러분 중에 이 정보를 사용하는 사람이 있다면 그 이유와 방법을 알려주십시오. 왜냐하면 제가 사용해야 하는 동작을 실수로 모호하게 만들고 싶지 않기 때문입니다.

답변1

두 번째 열의 링크를 보고 싶지 않다면 파이프 ls -al로 연결하면 됩니다 awk.

ls -al | awk '{$2=""; print $0}'

그러면 표준 구분 기호(이 경우 공백)를 사용하여 두 번째 열을 제외한 모든 열이 인쇄됩니다.

내 환경에서 마지막 수정 날짜의 열은 6, 7, 8이며 공백을 구분 기호로 사용하여 해당 열과 두 번째 열을 삭제할 수 있습니다.

ls -la | awk '{$2=$6=$7=$8=""; print $0}'

특정 열이 필요하지 않거나 보려는 경우 위 구문을 모델로 사용하여 원하는 열을 제거할 수 있습니다. 아무 것도 아프지 않을 것입니다. 모든 열을 보고 아무것도 놓치지 않으려면 다음 기준을 사용하세요.

ls -al

별칭을 원하면 ~/.bashrc에 다음을 추가하세요.

la() {
    ls -la | awk '{$2=$6=$7=$8=""; print $0}'
}

이 함수는 작은따옴표와 큰따옴표를 고려하거나 이스케이프 처리하지 않고 동일한 방식으로 작동합니다. laas를 사용하면 ll구문 오류가 발생합니다. 왜냐하면 내 환경에서는 이미 별칭이기 때문입니다.

답변2

ls -l나머지 줄은 그대로 유지하면서 출력에서 ​​하드 링크 수를 제거하려면 다음을 수행하십시오 .

ls -l | sed -E '2,$s/ +[0-9]+//'

교체는 sed첫 번째 줄 뒤의 각 줄에 있는 첫 번째 숫자 집합과 그 앞의 모든 공백(첫 번째 줄 포함 total)을 제거합니다.

함수로

myls () {
    command ls -l "$@" | sed -E '2,$s/ +[0-9]+//'
}

이 함수는 를 통해 결과를 보내기 전에 ls -l사용자가 함수에 제공하는 추가 명령줄 인수를 사용하여 호출됩니다 sed.

를 사용하면 command ls나중에 함수 이름을 바꾸기로 결정한 경우 ls함수가 자신을 재귀적으로 호출하지 않도록 할 수 있습니다.

예:

$ ls -la ~/.skel
total 18
drwxr-xr-x  2 kk    wheel  512 May  4 16:29 .
drwxr-xr-x  3 kk    wheel  512 Jun 28 08:15 ..
-rw-r--r--  1 kk    wheel   87 Nov  1  2017 .Xdefaults
-rw-r--r--  1 kk    wheel  771 Feb  9 10:18 .cshrc
-rw-r--r--  1 kk    wheel  101 Nov  1  2017 .cvsrc
-rw-r--r--  1 kk    wheel  359 Nov  1  2017 .login
-rw-r--r--  1 kk    wheel  175 Nov  1  2017 .mailrc
-rw-r--r--  1 kk    wheel  229 May  4 16:29 .profile
-rw-r--r--  1 kk    wheel  108 Apr 15 12:50 .vimrc
-rw-r--r--  1 kk    wheel    0 Apr 21 17:44 .zshrc

$ myls -a ~/.skel
total
drwxr-xr-x  kk    wheel  512 May  4 16:29 .
drwxr-xr-x  kk    wheel  512 Jun 28 08:15 ..
-rw-r--r--  kk    wheel   87 Nov  1  2017 .Xdefaults
-rw-r--r--  kk    wheel  771 Feb  9 10:18 .cshrc
-rw-r--r--  kk    wheel  101 Nov  1  2017 .cvsrc
-rw-r--r--  kk    wheel  359 Nov  1  2017 .login
-rw-r--r--  kk    wheel  175 Nov  1  2017 .mailrc
-rw-r--r--  kk    wheel  229 May  4 16:29 .profile
-rw-r--r--  kk    wheel  108 Apr 15 12:50 .vimrc
-rw-r--r--  kk    wheel    0 Apr 21 17:44 .zshrc

액션 함수의 변형정확히ls다음을 사용하지 않는 한 다음 과 같습니다 ls -l.

ls () (
    add_filter=0
    while getopts ':l' opt; do
        case $opt in
            l)  add_filter=1 ;;
            1)  add_filter=0
        esac
    done

    command ls "$@" | 
    if [ "$add_filter" -eq 1 ]; then
        sed -E '2,$s/ +[0-9]+//'
    else
        cat
    fi
)

-l이 함수는 옵션이 사용되었는지 감지하기 위해 자체 명령줄 구문 분석을 수행합니다 (나중에 옵션을 사용하여 비활성화되지는 않음). 그렇다면 우리는 플래그를 설정합니다. 나중에 플래그가 설정되면 필터링된 -1출력을 전달합니다. 플래그가 설정되지 않은 경우 출력을 있는 그대로 전달합니다.lssedcat

답변3

ast-open(ksh93이 포함되어 앞에 있는 경우 내장 함수이기도 함 ls)을 사용하면 출력 형식을 완전히 지정하고 링크 수를 생략할 수 있습니다( ).ls/opt/ast/bin/bin$PATH%3(nlink)u

ls -rSZ '%(mode)s %-8(uid)s %-8(gid)s %8(device:case::%(size)u:*:%(device)s)s %(atime)s %(name)s%(linkop:case:?*: %(linkop)s %(linkpath)s)s'

관련 정보