숨겨진 모든 파일과 디렉토리를 가져오고 싶지만 현재 (.
) 및 상위 디렉토리 (..
)는 아닙니다.
Bash를 사용하고 있습니다.
현재 행동을 관찰하십시오 :
$ ls -a
. .. ...a ...aa ..a ..aa .a .aa .aaa a
$ echo *
a
$ echo .*
. .. ...a ...aa ..a ..aa .a .aa .aaa
.*
가 다음과 같이 작동하도록하겠습니다.
$ echo .*
...a ...aa ..a ..aa .a .aa .aaa
쉘 옵션 dotglob
가 있습니다
$ shopt -s dotglob
그것은 어떤 방식으로 작동합니다; 이제 *
를 사용하여 모든 것을 숨길 수 있지만 .
및 ..
는 사용할 수 없습니다.
$ echo *
...a ...aa ..a ..aa .a .aa .aaa a
하지만 지금은 숨겨져 있는지 구분할 수 없습니다. 또한 .*
는 여전히 .
및 ..
를 사용합니다.
$ echo .*
. .. ...a ...aa ..a ..aa .a .aa .aaa
.*
를 .
및 ..
로 확장하지 않는 방법이 있습니까?
GLOBIGNORE
변수를 사용하여 .
및 ..
디렉토리. dotglob
옵션도 자동으로 설정되므로 *
은 (는) 숨김 파일과 숨겨지지 않은 파일을 모두 찾습니다. dotglob
을 수동으로 다시 설정 해제하면 원하는 동작이 제공됩니다.
이 예제를보십시오 :
$ ls -a
. .. a .a ..a
$ GLOBIGNORE=".:.."
$ shopt -u dotglob
$ echo * # all (only non-hidden)
a
$ echo .* # all (only hidden)
.a ..a
이 글로브에는 선행 점과 하나 이상의 다른 비점 문자가 필요합니다. 가능한 숨겨진 파일을 가져 오지만 .
또는 ..
, 정확히 당신이 요청한 것입니다.
ls -ld .[!.]*
당신은 파일을 찾고 있습니까? find
을 (를) 사용할 위치에 있습니까?
(GNU find
) 가정) :
find . -mindepth 1 -maxdepth 1 -name ".*" -printf "%P\n"
zsh
, fish
, pdksh
및 mksh
, posh
와 같은 파생어 중 일부는 다음과 같습니다.
echo .*
(이 쉘의 글롭은 .
또는 ..
를 확장하지 않습니다. 가장 합리적인 방법입니다.).
bash
사용시 :
shopt -s dotglob
echo [.]*
(dotglob
, .
및 ..
사용시 .
에서와 같이 리터럴 .*
로 시작하는 글로브를 사용하지 않으면 확장되지 않습니다. 그렇지 않으면 dir/.*
와 같이 예상치 못한 결과가 발생할 수 있으므로 chmod +rwx -- *
입니다.
또는:
GLOBIGNORE=.
echo .*
(bash
와 마찬가지로 dotglob
와 같은 이유로 GLOBIGNORE
가 비어 있지 않으면 .
와 ..
는 슬래시 (및 dotglob
가 활성화 됨)를 포함하지 않는 글롭에서 자동으로 무시되며 이번에는 위와 같이 리터럴 .
로도 마찬가지입니다. 예를 들어 GLOBIGNORE=/
는 효과).
그러나 .
및 ..
는 여전히 dir/.*
또는 .*/file
와 같은 glob에 포함됩니다.
ksh93
FIGNORE='@(.|..)'
echo .*
숨겨진 파일/폴더를 표시하고 싶지만 .
및 ..
?
이 bash 와일드 카드를 사용하십시오. {.[!.]*,..?*}
샘플 데이터
샘플 데이터를 생성하여 시도 할 수 있습니다.
$ touch ...a ...aa ..a ..aa .a .aa .aaa a
$ mkdir ...b ...bb ..b ..bb .b .bb .bbb b
증거
아래에서 예상되는 제거 된 항목을 볼 수 있습니다.
$ diff <(\ls -a) <(\ls -ad {.[!.]*,..?*})
1,3d0
< .
< ..
< a
11d7
< b
프로
숨겨진 요소를 모두 삭제하는 데 유용합니다 (예 :
$ rm -rf .*
rm: cannot remove directory: `.'
rm: cannot remove directory: `..'
# <regenerate sample data here>
$ rm -rf {.[!.]*,..?*}
# No error
ls -A
.
설명서에서 발췌
"-A,-거의 모두 묵시적. 및 .."로 표시되지 않습니다. ")
ls -1a|egrep -v '^(\.|\.\.)$'