ls -l 출력에서“total <size>”줄을 제거하는 가장 쉬운 방법은 무엇입니까? grep -v ‘^total’ 깃발에

Google / man ls을 통해 찾을 수있는 최선 은 다음과 같습니다.

ls -l | grep -v '^total'

깃발에 누락 된 것이 ls있습니까?

또한 -h 플래그에 관계없이 왜 총 크기가 kb입니까? 내가 뭘보고 있었는지 잘 모르겠다.



답변

의 소스 코드를 살펴보면 디렉토리 에서 옵션을 사용할 때 항상 표시되는 coreutils것을 알았습니다 .total-l

-d옵션을 사용하여 디렉토리 내용 대신 항목을 나열합니다 total. 그러나 인수없이 (또는 디렉토리에서) 실행하면 디렉토리가 아닌 디렉토리가 표시됩니다. 따라서 와일드 카드가 필요합니다. *모든 파일과 .*일치하고 숨겨진 파일도 일치합니다 ( -a옵션에 해당 ).

ls -ld * .*

에 관해서는 -h옵션, 나를 위해 작동합니다. 1118360 바이트는 1.1M으로 표시됩니다. 1024보다 작은 파일은 바이트 단위로 표시됩니다.


답변

ls디렉토리 목록 실행 을 피하기 위해 와일드 카드를 사용하면 ls과 같은 옵션 을 사용할 수 없으므로 최적이 아닙니다 --almost-all.

Enzotib의 제안 과 마찬가지로 그것을 제거하는 가장 간단한 방법 tail은 첫 번째 줄을 잘라내 도록 파이프를 통과 시키는 것입니다. 그러나 ls출력이 대화식이 아닌 파이프임을 감지하고 원하지 않는 방식으로 기본값을 변경합니다. 따라서 견고하게하려면 몇 가지 옵션을 추가해야합니다.

  • --color=always: 계속 색상 표시
  • --hide-control-chars: ?콘솔 출력을 망칠 수있는 제어 문자 대신 파일 이름으로 인쇄

스크립트가 있습니다 ~/bin/l(에서 Bash 별칭을 사용할 수도 있습니다 ~/.bash_aliases).

#!/bin/bash
ls -l --color=always --hide-control-chars "$@" | tail --lines=+2

ls기본적으로 원하는 다른 옵션을 추가 할 수도 있습니다 ( 예 🙂 --group-directories-first --time-style='+%FT%T.%N%:::z' --indicator-style=slash.


답변

ls -l *

을 사용하지 않고 “일반적으로 이름이 지정된”폴더 내용을 제공합니다 total. 그것은 당신의 필요에 적합 할 것입니다. 불행히도 dot접두사 파일을 제공하지 않습니다 . 당신이 사용하는 경우 ls -l * .*리눅스는 트리를 탐색하기 때문에 당신은 혼란을 얻을 것이다.

점 접두사는 폴더를 의미하거나 와일드 카드를 사용하면 위의 폴더를 의미하므로 접두사가 붙은 일반 파일을 선택하는 데 도움이되지 않습니다. 이것은 불행한 디자인 결정으로 보인다.


답변

$ ls -l [DIRECTORY] | sed 1d
(출력은 파일 이름을 포함합니다)

$ ls -ld [path-to-dir]/*
(출력에는 상대 경로가 포함되지만 색상은 보존됩니다)

$ ls -l [DIRECTORY] | tail -n +2

$ ls -l [DIRECTORY] | awk 'NR>=1'


참고 :
“total ….”이라는 파일이있는 경우 다음이 작동하지 않습니다.

$ ls -l | grep -v '^total'