디렉토리 안의 숨겨진 파일과 *를 일치시키는 방법 결과가 표시되지 않습니다.

주어진 디렉토리 안에 숨겨진 파일을 일치시키는 방법

예를 들어

아래 명령을 수행하면 숨겨진 파일의 결과가 표시되지 않습니다.

 du -b maybehere*/*

사용하는 대신 단일 명령을 사용하여이 간단한 작업을 수행하는 방법

du -b maybehere*/.* maybehere*/*

어딘가에 두 번 입력해야합니다.



답변

버팀대 확장을 활용하십시오.

du -b maybehere*/{*,.[^.],.??*}

또는 대안 적으로

du -b maybehere*/{,.[^.],..?}*

이것의 논리는 분명하지 않을 수 있으므로 여기에 설명이 있습니다.

  • * 숨겨지지 않은 모든 파일과 일치
  • .[^.]단일 점으로 시작하고 그 뒤에 점이 아닌 파일을 찾습니다. 첫 번째 형식의 파일 이름은 2 자입니다.
  • .??* 3 자 이상의 숨겨진 파일과 일치
  • ..?* 위와 같이 두 번째 문자는 점이어야합니다

요점은 현재 및 상위 디렉토리 ( ...)에 대한 하드 링크를 제외 하지만 각 일반 파일을 한 번만 계산하는 방식으로 모든 일반 파일을 포함시키는 것입니다!

예를 들어 가장 간단한 방법은

du -b maybehere*/{.,}*

즉, 목록에 점 .과 “아무것도 없음”(사이에 ,없고 닫힘 없음 })이 있으므로 모든 숨겨진 파일 (점에서 시작)과 숨겨지지 않은 모든 파일 ( “아무것”에서 시작)이 일치한다는 것을 의미합니다. 문제는 이것 또한 .and과 일치 할 것이고 .., 이것은 아마도 당신이 원하는 것이 아닐 것이므로, 우리는 어떻게 든 그것을 배제해야합니다.


버팀대 확장에 대한 최종 단어.

중괄호 확장 은 더 적은 문자를 사용하여 명령 줄에 더 많은 파일 / 문자열 / 무엇을 포함시킬 수있는 메커니즘입니다. 구문은 {word1,word2,...}, 즉 쉼표로 구분 된 문자열 목록으로 시작 {하고 끝납니다 }. bashmanual은 매우 기본적이고 동시에 가장 일반적인 사용 예를 제공합니다.

$ echo a{b,c,d}e
abe ace ade


답변

이미 GNU 특정 구문 ( -b)을 사용하고 있기 때문에 :

du -abd1 maybehere*/

그렇게 du하면 maybehere*디렉토리 의 파일을 나열하고 도트 파일을 제외하지 않습니다. -d1디스크 사용량보고를 한 수준 아래로 제한합니다 (를 사용하여 비 디렉토리 포함 -a).

그렇지 않으면, 글로브가 숨겨진 파일 ( .및 제외 ..) 을 포함하기 위해 각 쉘에는 고유 한 구문이 있습니다.

  • zsh:

    du -b maybehere*/*(D)
  • ksh93:

    (FIGNORE='@(.|..)'; du -b maybehere*/*)
  • bash:

    (shopt -s dotglob; du -b maybehere*/*)
  • tcsh:

    (set globdot; du -b maybehere*/*)
  • yash:

    (set -o dot-glob; du -b maybehere*/*)

    그러나 포함되어 .있고 ..그 결과를 포함하는 시스템에서는 readdir() 사용이 거의 불가능합니다.


답변

다른 옵션은 여기에 있습니다 :

du -sm .[!.]* *


답변

숨겨진 디렉토리를 나열하거나 숨겨진 디렉토리에서 작업하려면 Costas가 말한 것처럼 사용할 수 있습니다

du -b maybehere*/.*

이를 통해 숨겨진 파일 및 디렉토리에서 작업 할 수 있습니다. 숨겨진 디렉토리 만 원한다면 다음을 사용하여 지정할 수 있습니다

du -b maybehere*/.*/


답변

직접 쉘은 아니지만 다음과 같이 제한된 깊이로 find를 사용할 수 있습니다

find maybehere -maxdepth 1 -exec du -sh {} \;


답변