주어진 디렉토리 안에 숨겨진 파일을 일치시키는 방법
예를 들어
아래 명령을 수행하면 숨겨진 파일의 결과가 표시되지 않습니다.
du -b maybehere*/*
사용하는 대신 단일 명령을 사용하여이 간단한 작업을 수행하는 방법
du -b maybehere*/.* maybehere*/*
어딘가에 두 번 입력해야합니다.
답변
버팀대 확장을 활용하십시오.
du -b maybehere*/{*,.[^.],.??*}
또는 대안 적으로
du -b maybehere*/{,.[^.],..?}*
이것의 논리는 분명하지 않을 수 있으므로 여기에 설명이 있습니다.
*
숨겨지지 않은 모든 파일과 일치.[^.]
단일 점으로 시작하고 그 뒤에 점이 아닌 파일을 찾습니다. 첫 번째 형식의 파일 이름은 2 자입니다..??*
3 자 이상의 숨겨진 파일과 일치..?*
위와 같이 두 번째 문자는 점이어야합니다
요점은 현재 및 상위 디렉토리 ( .
및 ..
)에 대한 하드 링크를 제외 하지만 각 일반 파일을 한 번만 계산하는 방식으로 모든 일반 파일을 포함시키는 것입니다!
예를 들어 가장 간단한 방법은
du -b maybehere*/{.,}*
즉, 목록에 점 .
과 “아무것도 없음”(사이에 ,
없고 닫힘 없음 }
)이 있으므로 모든 숨겨진 파일 (점에서 시작)과 숨겨지지 않은 모든 파일 ( “아무것”에서 시작)이 일치한다는 것을 의미합니다. 문제는 이것 또한 .
and과 일치 할 것이고 ..
, 이것은 아마도 당신이 원하는 것이 아닐 것이므로, 우리는 어떻게 든 그것을 배제해야합니다.
버팀대 확장에 대한 최종 단어.
중괄호 확장 은 더 적은 문자를 사용하여 명령 줄에 더 많은 파일 / 문자열 / 무엇을 포함시킬 수있는 메커니즘입니다. 구문은 {word1,word2,...}
, 즉 쉼표로 구분 된 문자열 목록으로 시작 {
하고 끝납니다 }
. bash
manual은 매우 기본적이고 동시에 가장 일반적인 사용 예를 제공합니다.
$ 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 {} \;