total 36
숙제를 위해 여기서 생성된 출력을 Linux에서 얻으려고 합니다 ls -s
.
vboxuser@Ubuntu:~$ ls -s
insgesamt 36
4 Bilder 4 Dokumente 4 Downloads 4 Musik 4 Öffentlich 4 Schreibtisch 4 snap 4 Videos 4 Vorlagen
awk
or를 사용하여 몇 가지 명령을 시도했지만 du
원하는 결과를 얻지 못했고 얻을 수 있는 가장 가까운 결과는 다음과 같습니다.
ls -s --block-size=1024
나에게 도움이 될 수 있는 명령이 있나요?
답변1
이렇게 하면 원하는 작업이 수행됩니다.
ls -s | grep ^total
파일 목록에서 각 파일의 이름 앞에는 크기가 표시되어 있으므로 "total"이라는 파일이 존재하더라도 파악되지 않습니다.
이 기능이 작동하려면 쉘 언어(로케일)를 독일어에서 영어로 변경해야 합니다.
답변2
사용진주:
~$ ls -s | perl -ne '$. == 1 && print $_;'
또는:
~$ ls -s | perl -ne 'print $_ if $. == 1;'
사용행복하다(이전 Perl_6):
~$ ls -s | raku -ne '++$ == 1 && .put;'
또는:
~$ ls -s | raku -ne '.put if ++$ == 1;'
합계가 첫 번째 출력 라인에 인쇄 되므로 ln -s
위의 답변은 기본적으로 문제를 해결합니다."<STDIN>의 첫 번째 줄을 어떻게 인쇄하나요?"
두 언어(Perl 및 Raku) 모두 -ne
"비자동 인쇄 한 줄씩 인쇄" 명령줄 플래그를 구현하고 이에 의존하여 줄 번호 변수가 출력을 제어할 수 있도록 합니다.
Perl을 사용하여 $.
행 번호 변수가 1인지 테스트하면 &&
단락 연산자가 주제 변수 print
가 됩니다 . $_
또는 (두 번째 예) if
조건을 사용하세요.
Raku를 사용하면 익명 $
스칼라가 미리 증가되고( ++$
) 1과 동일한 것으로 테스트된 다음 &&
단락 연산자가 주제 변수 put
가 됩니다 . $_
이 코드는 조건을 사용하는 .or(두 번째 예) 의 .put
약어입니다 .$_.put
put $_
if
출력 예(네 가지 코드 예 모두):
total 36
답변3
ls
파일 이름 인수 없이 호출할 때와 같이 디렉토리의 내용을 나열하기 위해 ,,,, 옵션 중 하나와 함께 호출하면 기본적으로 나열(현재 작업 디렉토리)이 되며 출력에 접두어를 추가합니다.-s
-l
-n
-o
-g
.
total <a-number>
이 숫자는 나열된 파일이 차지하는 할당된 512바이트 디스크 공간 단위의 총 개수입니다. GNU 구현의 경우 환경에서 변수를 사용하여 호출하거나 옵션 또는 환경 변수를 사용하여 블록 크기를 지정 find
하지 않는 한 1024바이트 단위입니다 .POSIXLY_CORRECT
--block-size
BLOCK_SIZE
LS_BLOCK_SIZE
비지박스나 토이박스(안드로이드)를 사용하면 해당 환경 ls
에서도 1024바이트 단위를 얻을 수 POSIXLY_CORRECT
있는데, 이러한 비준수를 해결할 수 있는 방법은 없는 것 같습니다.
대부분의 다른 구현에서는 512바이트 단위 수를 보고해야 합니다.
ls
현지화된 구현을 사용하면 total
사용자의 언어로 번역될 수 있는데, 이는 귀하의 경우인 것 같습니다. total
로케일에 관계없이 사용자 환경 LC_ALL=C
에서 호출 할 수 있도록 C(일명 POSIX 로케일)는 total
표준에서 지정하는 방식이므로 보장되는 유일한 로케일입니다.
그래서:
POSIXLY_CORRECT=1 LC_ALL=C ls -s | head -n 1
busybox/toybox를 제외한 총 512바이트 단위 수를 가져옵니다.
ls
특히 GNU의 경우 1024바이트 단위 수의 경우 :
LC_ALL=C ls --block-size=1024 -s | head -n 1