ls는 디렉터리/파일 이름과 크기만 표시합니다.

ls는 디렉터리/파일 이름과 크기만 표시합니다.

우선, 이것은 다음과 중복되지 않습니다.Linux ls는 파일 이름 날짜와 크기만 표시합니다.

실제 디렉토리 이름을 추가로 인쇄하고 싶기 때문입니다.

나는 항상 다음 명령을 사용합니다.

ls -l | awk '{print $5, $9}'

각 파일의 크기와 이름을 가져옵니다.

하지만 이제는 파일 디렉터리를 추가로 인쇄해야 합니다. 현재 디렉토리가 이면 다음을 /path/to/somewhere원합니다.

somewhere/file 1234
somewhere/other-file 4567

그리고 뿐만 아니라

file 1234
other-file 4567

그게 가능합니까?

답변1

각 파일 이름 앞에 현재 디렉터리를 추가한다는 뜻인가요?

ls -l | awk '{printf("%s %s/%s\n", $5, ENVIRON["PWD"], $9); }'

아니면 다른 것입니까?


좋아요,확실히당신이 원하는 것은

$ cd /some/path/to/somewhere
$ <insert command here>
somewhere/file1 size1
somewhere/file2 size2
...

저것옳은?

그렇다면 (POSIX 쉘을 가정하여) 필요한 변경 사항은 다음과 같습니다.

ls -l | DIR=${PWD##*/} awk '{printf("%s/%s %s\n", ENVIRON["DIR"], $9, $5); }'

대신에.

에서는 오류가 사용 중임을 나타내 tcsh므로 다음을 사용합니다.Illegal variable name

ls -l | env DIR=$PWD:t:q awk '{printf("%s/%s %s\n", ENVIRON["DIR"], $9, $5); }'

대신에.


그 경우아직작동하지 않습니다. 질문에 플랫폼, 셸, awk 버전 등을 설명해 주세요. 댓글 스레드가 너무 길어져서 추측할 수 있는 내용이 부족합니다. :-)

답변2

"ls 출력을 구문 분석하지 않음"이라는 정신으로 ?를 사용하지 않는 이유는 무엇입니까 find?

find . -mindepth 1 -maxdepth 1 -printf '%p\t%s\n'

(이것은 확장자가 GNU라고 가정합니다 find. -printf)

파일의 전체 경로가 필요한 경우 다음 .으로 바꾸십시오 "$PWD"(또는 $PWD:q사용된 경우). tcsh대조적으로 ls숨겨진 파일이 포함되어 있으며 파일 목록을 정렬하지 않습니다.

답변3

$ du -b

사람이 읽을 수 있는 크기의 경우:

$ du -bh

답변4

나는 당신이 필요하다고 생각합니다 ls:

ls -sh1 /var/log/mysql/*
0 /var/log/mysql/mysqld.log
4.0K /var/log/mysql/mysqld.log-20140718
4.0K /var/log/mysql/mysqld.log-20140827
4.0K /var/log/mysql/mysqld.log-20140829
  • -s각 파일의 인쇄 크기
  • -h사람이 읽을 수 있는 크기로 인쇄
  • -1각 파일을 새 줄에 인쇄
  • *와일드카드 와일드카드는 전체 경로의 인쇄를 "활성화"합니다.
  • 선택사항: -S크기별로 정렬
  • 선택사항: -t시간순으로 정렬

관련 정보