`du -sh *`가 잘못된 옵션에 대해 불평하는 이유는 무엇입니까?

`du -sh *`가 잘못된 옵션에 대해 불평하는 이유는 무엇입니까?

*나는 최고의 결과를 검색했지만 내 인생에서 최근 업데이트 이후 (별표)를 무엇으로 대체해야할지 알 수 없습니다 (심지어 Wikipedia도 생각하는 것 같습니다)

du -sh * and du -sh *작동해야 함)

나는 사용했다

du -sh * | sort -h

이전에는 이 옵션이 정렬되어 있었지만 -h(Fedora에서는 CentOS에서 작동하도록 하는 데 시간이 좀 걸렸던 것 같습니다 sort -h) 갑자기* 긴 목록이 출력되는 것 같습니다.

du: invalid option -- ' '

' '매뉴얼 페이지에 언급되지 않은 모든 유효하지 않은 옵션을 반복합니다 .

누구든지 나에게 무엇이 동등한지 말해 줄 수 있다면

du -sh * | sort -h

업데이트된 버전에 대해.

답변1

아마도 로 시작하는 흥미로운 이름의 파일이 있습니다 -. glob(예: *)은 쉘에 의해 확장된다는 점을 기억하십시오.아니요실행 중인 명령입니다. 예를 들어 다음과 같은 경우가 있다고 가정해 보겠습니다.

$ ls -1
foo
-q

두 개의 파일이 포함된 충분히 간단한 디렉토리입니다. ( -1coreutils에 대한 옵션으로 ls인해 출력이 단일 열이 됩니다.)

를 실행하면 du -sh *쉘은 두 번째 인수에 특수 문자( *)가 포함되어 있고 따옴표로 묶이지 않았음을 인식하여 전역적으로 확장합니다. 일치하는 모든 항목(이 경우 foo및 )으로 확장됩니다 -q. 효과는 다음을 실행한 것과 정확히 동일합니다.

$ du -sh foo -q
du: invalid option -- 'q'
Try 'du --help' for more information.

du위의 오류는 명백합니다. 편의를 위해 GNU 유틸리티에서는 옵션을 파일 이름과 혼합할 수 있습니다 -q. 그리고 선택의 여지가 없습니다 -q. (그것은 정말로 여러분이 바랄 수 있는 최선입니다. -q옵션이 있고 필요하지 않은 작업을 수행했다면 더 나쁠 것입니다.)

Stépahane의 제안은 glob을 로 변경하는 것입니다 ./*. 그 결과 du -sh ./foo ./-q는 더 이상 로 끝나지 않으므로 파일 이름으로 처리됩니다 -. 그가 제안한 또 다른 옵션은 --GNU 유틸리티에 더 이상 옵션이 없음을 알려주는 것입니다. 파일/디렉터리 이름.

정말 그래야 해언제나을 사용 … ./*하거나 … -- *대체 *하지만 우리는 모두 게으르다… 특히 모든 파일 이름을 신뢰하지 않는 경우 주의하세요.

답변2

du는 파일의 대시를 사용하여 매개변수로 전달합니다.

명령에 "--"를 전달하면 더 이상 옵션이 전송되지 않는다는 의미이므로 다음과 같이 명령을 실행하십시오: du -fh -- * 또는 du -sh -- *

나를 위해 일해라...

이 스레드가 도움이 되었습니다:-http://www.webhostingtalk.com/showthread.php?t=1354139

관련 정보