
.[!.]*
and를 제외한 디렉토리의 모든 도트 파일을 참조하는 데 using을 사용하는 방법을 알고 있지만 ..
및를 제외한 모든 도트 ..
파일을 어떻게 참조합니까 .git
? .[!.||.git]*
및 등 .[!.][!.git]*
의 여러 변형을 시도했지만 그 중 어느 것도 예상된 파일을 참조하지 않습니다.
답변1
Bash에서는 확장된 와일드카드를 사용할 수 있습니다.
shopt -s extglob
ls .!(.|git)
그러나 이는 와도 일치하므로 .
필요할 수 있습니다.
ls .!(|.|git)
답변2
다음을 사용하여 찾을 수 있습니다.
find . -type f '!' -iname ".git" -exec cp -rv {} /dest/path \;
.git
우리가 사용한 파일을 제외하고 현재 디렉토리의 모든 파일을 검색합니다 ! -iname
(이는 !
다음과 같지 않음을 의미합니다.) 그런 다음 파일을 대상 위치에 복사합니다.
고쳐 쓰다
find . -not -path '.' -not -path './.git' -iname '.*'
-iregex
find에서도 사용할 수 있습니다 .
find . -not -iregex '.\|./.git' -iname '.*'
..
두 예제 모두 및를 제외한 현재 경로의 모든 도트 파일을 참조합니다 ..git
답변3
숨겨진 파일을 제외한 모든 숨겨진 파일을 재귀적으로 찾으려면(이름이 다음으로 시작하는 파일 .
과 이름이 재귀적으로 시작하는 디렉터리의 파일 포함) 다음을 수행할 수 있습니다..
.git
LC_ALL=C find . -path ./.git -prune -o -path '*/.*' -print
다른 곳에 복사하려면 find
다음 숨겨진 디렉터리 검색을 중지해야 합니다.
LC_ALL=C find . -path ./.git -prune -o -name '.?*' -prune -exec sh -c '
exec cp -Rip "$@" /path/to/destination/' {} +
(이 옵션은 최종 복사본이 만들어지는 시기와 -i
시기를 .)./foo/.file
./bar/.file
/path/to/destination/.file
GNU 구현을 사용하면 cp
다음 sh
옵션을 통해 이 문제를 피할 수 있습니다 -t
.
LC_ALL=C find . -path ./.git -prune -o -name '.?*' -prune \
-exec exec cp -ait /path/to/destination/ {} +
이는 최상위 .git
디렉터리/파일만 건너뜁니다. 뛰어 넘다어느 .git
파일은 하위 디렉터리에 있는 파일 -path ./.git
이라도 -name .git
.
답변4
zsh에서는 Forsyth 셸 및 파생물(pdksh 및 mksh와 같은 파생물)과 마찬가지로 glob 확장자에 포함되지 않으므로 현재 작업 디렉터리의 파일을 나열합니다 .
( 특수 항목 및 다음을 수행할 수 있습니다...
.*
.git
.
..
set -o extendedglob
print -rC1 .^git(N)
.
버전 5.2부터 globskipdots ..
옵션을 끄지 않으면 globskipdots 옵션도 기본적으로 제외됩니다. bash
확장된 glob 구문은 ksh88 이후에 형성되었으며 bash에는 olumn print
에 대한 내장 명령이 없으며 glob 한정자를 사용하여 glob별로 ullglob 옵션을 켤 수 없으므로 이에 상응하는 내용은 다음과 같아야 합니다.1
C
N
println() { [ "$#" -eq 0 ] || printf '%s\n' "$@"; }
shopt -s extglob nullglob
println .!(git)
이전 버전에서는 dotglob 옵션이 활성화되어 있고 명시적인 일치가 이루어지지 않는 한 glob 확장에 포함 .
할 수 있으므로 이전 버전에서는 다음을 수행할 수 있습니다...
.
println() { [ "$#" -eq 0 ] || printf '%s\n' "$@"; }
shopt -s extglob nullglob dotglob
println [.]!(git)
[.]
.
대신에 일치하지 않습니다분명히.
또는 다음을 통해 명시적으로 제외합니다.
println() { [ "$#" -eq 0 ] || printf '%s\n' "$@"; }
shopt -s extglob nullglob
println .!(|.|git)
ksh93u+m 2020-08-09부터 ksh93은 자체적으로 건너뜁니다 .
. ..
ksh93부터는 zsh의 glob qualifier와 기능적으로도 동일합니다 ~(N)
.N
function println { [ "$#" -eq 0 ] || printf '%s\n' "$@"; }
println ~(N).!(git)
이전 버전에서는 다음을 수행할 수 있습니다.
function println { [ "$#" -eq 0 ] || printf '%s\n' "$@"; }
FIGNORE=.:..
println ~(N).!(git)
이 설정은 숨겨진 파일이 더 이상 glob에서 제외되지 않음을 의미하므로 설정은 FIGNORE
zsh 또는 bash5.2+에서 이 옵션을 설정하는 것과 .:..
동일한 효과를 갖습니다 .dotglob
bash에는 GLOBIGNORE
ksh와 유사한 변수 가 FIGNORE
있지만그 디자인은 끔찍해그래서 나는 그것을 사용하지 않는 것이 좋습니다.
물론 다음을 통해 명시적으로 제외할 수도 있습니다.
function println { [ "$#" -eq 0 ] || printf '%s\n' "$@"; }
println ~(N).!(git)