it-swarm-ko.tech

현재 및 상위 디렉토리를 제외한 모든 숨겨진 파일을 가져 오는 방법

숨겨진 모든 파일과 디렉토리를 가져오고 싶지만 현재 (.) 및 상위 디렉토리 (..)는 아닙니다.

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

.*...로 확장하지 않는 방법이 있습니까?

70
lesmana

GLOBIGNORE 변수를 사용하여 ... 디렉토리. dotglob 옵션도 자동으로 설정되므로 *은 (는) 숨김 파일과 숨겨지지 않은 파일을 모두 찾습니다. dotglob을 수동으로 다시 설정 해제하면 원하는 동작이 제공됩니다.

이 예제를보십시오 :

$ ls -a
.  ..  a  .a  ..a
$ GLOBIGNORE=".:.."
$ shopt -u dotglob
$ echo * # all (only non-hidden)
a
$ echo .* # all (only hidden)
.a ..a
65
Marcel Stimberg

이 글로브에는 선행 점과 하나 이상의 다른 비점 문자가 필요합니다. 가능한 숨겨진 파일을 가져 오지만 . 또는 .., 정확히 당신이 요청한 것입니다.

ls -ld .[!.]*
20
bukzor

당신은 파일을 찾고 있습니까? find을 (를) 사용할 위치에 있습니까?

(GNU find) 가정) :

find . -mindepth 1 -maxdepth 1 -name ".*" -printf "%P\n"
6
Deano

zsh, fish, pdkshmksh, posh와 같은 파생어 중 일부는 다음과 같습니다.

echo .*

(이 쉘의 글롭은 . 또는 ..를 확장하지 않습니다. 가장 합리적인 방법입니다.).

bash 사용시 :

shopt -s dotglob
echo [.]*

(dotglob, ... 사용시 .에서와 같이 리터럴 .*로 시작하는 글로브를 사용하지 않으면 확장되지 않습니다. 그렇지 않으면 dir/.*와 같이 예상치 못한 결과가 발생할 수 있으므로 chmod +rwx -- *입니다.

또는:

GLOBIGNORE=.
echo .*

(bash와 마찬가지로 dotglob와 같은 이유로 GLOBIGNORE가 비어 있지 않으면 ...는 슬래시 (및 dotglob가 활성화 됨)를 포함하지 않는 글롭에서 자동으로 무시되며 이번에는 위와 같이 리터럴 .로도 마찬가지입니다. 예를 들어 GLOBIGNORE=/는 효과).

그러나 ...는 여전히 dir/.* 또는 .*/file와 같은 glob에 포함됩니다.

ksh93

FIGNORE='@(.|..)'
echo .*
6

숨겨진 파일/폴더를 표시하고 싶지만 ...?

이 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
4
frntn

ls -A.

설명서에서 발췌

"-A,-거의 모두 묵시적. 및 .."로 표시되지 않습니다. ")

2
Orso Grigio
ls -1a|egrep -v '^(\.|\.\.)$'
0
codehead