나는 현재 디렉토리의 모든 디렉토리에 대해 du 명령을 사용하려고합니다. 그래서 다음과 같은 코드를 사용하려고합니다 :du 또는 echo 파이프 라이닝이 작동하지 않는 이유는 무엇입니까?
ls | du -sb
예상대로 작동하지 않습니다. 현재 ''의 크기 만 출력합니다. 디렉토리와 그게 다야. 동일한 것은 반향입니다.
ls | echo
빈 줄을 출력합니다. 왜 이런 일이 일어나는 걸까요? 파이프를 사용
나는 현재 디렉토리의 모든 디렉토리에 대해 du 명령을 사용하려고합니다. 그래서 다음과 같은 코드를 사용하려고합니다 :du 또는 echo 파이프 라이닝이 작동하지 않는 이유는 무엇입니까?
ls | du -sb
예상대로 작동하지 않습니다. 현재 ''의 크기 만 출력합니다. 디렉토리와 그게 다야. 동일한 것은 반향입니다.
ls | echo
빈 줄을 출력합니다. 왜 이런 일이 일어나는 걸까요? 파이프를 사용
자식 프로세스 (제 2 커맨드)의 표준 입력 (입력)에, 제 커맨드의 출력 ( 표준 출력 )를 전송한다. 언급 한 명령은 stdin
에서 아무런 입력도받지 않습니다. 이것은 (I 인수없이 cat
실행처럼 작동, 그냥 입력 당신이 그것을 줄을 따라 통과 의미 및 작업에 의해) cat
, 예를 들면, 작동합니다 : 응용 프로그램에 대한
ls | cat
,이 곳 xargs
입니다 그것이 파이프 된 입력을 받아서 지정된 명령의 인수로 제공합니다.
ls | xargs du -sb
이 파일 이름에 공백이 포함 된 경우 당신이 원하는대로이 작동하지 않도록, 공간에 입력을 중단합니다 기본 xargs
하여 해당 조심 : 그래서, 당신처럼 작동 할 수 있습니다. 그래서,이 특별한 경우에,이 더 나은 것 :이 같은
du -sb *
$ find . -type d -maxdepth 1 -exec du -sb {} \;
또는
$ ls -d */ | xargs du -sb
사용 명령 치환 :
du -sb $(ls -d */)
것은 뒤 -sb * 무엇을 의미 하는가 ? – Romeno
'*'는 glob (또는 알고 있을지도 모르는 와일드 카드)입니다. 쉘은 현재 디렉토리에서 그와 일치하는 모든 파일 (또는 디렉토리 등) 이름으로 바꿉니다. 예를 들어 Y는 .jpg로 끝나는 모든 파일과 일치하도록'* .jpg '라고 말할 수도 있습니다. – FatalError