디렉토리 안의 숨겨진 파일과 *를 일치시키는 방법


21

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

예를 들어

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

 du -b maybehere*/*

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

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

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


숨겨져 서 maybehere*/.*모두를 위해 위의 내용을 추가하십시오
Costas

1
편집하면 추가 제한 사항이있는 새로운 질문이 생겨 Q가 움직이는 대상이되어 이미 제공된 답변이 무효화 될 수 있습니다. 매너가 좋지 않다면 새로운 질문이 있으면 물어보십시오.
Anthon

답변:


22

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

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

또는 대안 적으로

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

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

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

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

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

du -b maybehere*/{.,}*

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


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

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

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

의 사용 무엇 { }나는 전혀 모른다는 :( 당신이 나에게 그것에 대해 더 많은 정보를 얻을 수있는 방향을 제공 할 수 있습니다
vidhan

@vidhan은 편집 내용을보고 man bash"Brace Expansion"장을보십시오.
jimmij

위의 ans에 대해 더 많은 설명을 해 주시겠습니까
@jimmij

6
.??*일치에 실패 .a, .b... .[^.]*일치하지 ..foo.
Stéphane Chazelas

4
.foo모두 일치 .[^.]*하고 .??*. 당신은 원합니다 {.[!.],..?,}*.
Stéphane Chazelas

14

이미 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() 사용이 거의 불가능합니다.


8

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

du -sm .[!.]* *

로 시작하는 파일 이름을 왜 생략 ..하시겠습니까?
Kusalananda

2
아마도 그들은 모든 것을 ../아래 에 나열하고 싶지 않기 때문에 아마도 .
Shadur

예를 들어 ..myfile; ..?*그것을 위해 추가하십시오 . 그러나 제외 어 일치에 적절한 glob 구문을 사용하는 경우 +1입니다.
페드로 지 메노

0

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

du -b maybehere*/.*

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

du -b maybehere*/.*/


질문을 다시 한 번 참조하시기 바랍니다 @SailorCire 조금 편집했습니다
vidhan

@vidhan 그래서 하나의 디렉토리 안에 숨겨진 작업만을 원하십니까? 그 맞습니까?
SailorCire

아니오 하나의 디렉토리 안에 숨겨진 파일과 숨겨지지 않은 파일을 모두 일치시키지 않고 du maybehere*/.*와 숨겨진 파일을 사용하지 않고 maybehere*/*다른 파일을 숨기려고합니다.
vidhan

@vidhan du -b은 숨겨진 것과 숨겨지지 않은 것을 모두 선택합니다.
SailorCire

어떤 :( 불행히도 @SailorCire
vidhan

0

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

find maybehere -maxdepth 1 -exec du -sh {} \;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.