ls -d .*
숨겨진 "항목"(파일 및 디렉터리)만 나열합니다. 기술적으로 (제 생각에는) 로 시작하는 모든 프로젝트를 나열합니다 .
. 여기에는 현재 디렉터리 .
와 위의 디렉터리가 포함됩니다 ..
.
ls -A
또한 "거의 모든" 항목이 나열되고 숨겨진 항목과 숨김 해제된 항목이 나열되지만 .
및 는 포함되지 않는다는 것을 알고 있습니다 ..
. 그러나 이들을 결합해도 ls -dA .*
내 숨겨진 항목의 "거의 모든" 항목이 나열되지는 않습니다.
제외하는 방법과 숨겨진 항목만 나열되는 경우는 무엇입니까 .
?..
답변1
sum 1 을.
제외한 모든 사례를 결합할 수 있습니다 . 또한 특수 파일 이름도 차단되지 않습니다...
ls -d .[!.]* ..?*
디렉토리에 실제로 내용이 너무 많고 명령이 실패할 위험이 있는 경우 Argument list too long
이를 대신 사용할 수 있습니다(그러나 -printf '%f\n'
선행을 제거하는 옵션은 ./
GNU find에만 해당되며 -maxdepth
POSIX에는 존재하지 않습니다).
find . -maxdepth 1 -name '.*' ! '(' -name . -o -name .. ')' -printf '%f\n'
-print0
-printf '%f\0'
LF와 같은 특수 문자를 처리하려면 유사한 옵션을 사용할 수 있지만 모든 도구는 이를 지원해야 합니다( GNU 전용이 나타나고 로 대체될 수 있지만 -print0
선행을 유지하는 경우를 제외하고 GNU 또는 FreeBSD 변형이 이를 지원합니다 ./
).
find . -maxdepth 1 -name '.*' ! '(' -name . -o -name .. ')' -printf '%f\0'| sort -z | xargs -0 [...]
1 :POSIX는 대괄호가 다음으로 시작하도록 지정합니다.[!
[^
정규식과 같은 파일 이름 확장자의 문자를 부정하는 데 사용하면 결과가 지정되지 않습니다(예:세게 때리다허용하다)).
답변2
이것은 다음에서 답변되었습니다.우분투에 물어보세요, 여기서 재현하겠습니다.
ls -d .!(|.)
Bash의 확장 glob 사용( shopt -s extglob
활성화됨)
ls -d .[!.]* ..?*
그렇지 않다면
답변3
.
및 없이 숨겨진 파일 만 나열하려는 경우..
ls -ld .[!.]*
숨김 여부에 관계없이 모든 파일을 나열하려면 .
다음을 ..
사용할 수 있습니다.
ls -lA
여기에는 l
긴 목록이 포함되며 A
숨김 항목과 숨김 해제 항목 표시가 포함됩니다 .
...
-d
내용을 나열하지 않고 디렉터리만 나열합니다. 현재 있는 폴더의 내용만 나열하려고 하므로 필요하지 않습니다.
긴 목록을 원하지 않으면 제거하세요 -l
.
답변4
UNIX
당신이 관찰한 문제는 1970년대 초로 거슬러 올라가는 해커 공격의 결과입니다. 코드 크기를 줄이기 위해 디렉토리에는 실제 디렉토리가 제공되었으며 .
항목 ..
은 현재 디렉토리 및 이전 디렉토리에 대한 디렉토리 하드 링크로 구현되었습니다. 최신 파일 시스템은 내부 구조가 다릅니다...
이 문제를 해결하는 좋은 방법은 표현식의 일치하는 파일 목록에 및 를 포함하지 않는 쉘을 선택하는 것입니다 .
...
.*
bosh
껍질이 바로 그런 것 입니다 mksh
. 셸을 테스트하려면 다음을 호출하는 것이 좋습니다.
mkdir /tmp/t
cd /tmp/t
echo .*
결과는 다음과 같습니다.
. ..
다음 결과를 얻으면 셸은 일치하는 결과에 다음 패턴을 포함합니다.
.*
귀하의 쉘은 .
결과에서 제외됩니다. ..
그러나 이 결과는 항목이 없는 파일 시스템으로 인해 발생할 수도 있으므로 .
다음 ..
사항 도 확인하십시오.
ls -Fa
이 파일을 나열하십시오.
POSIX
이것은 얼마 전에 변경되어 이제 이 동작을 허용합니다. 파일 시스템이 이러한 디렉터리를 물리적으로 지원할 필요조차 없기 때문에 향후 버전 POSIX
에서는 일치 결과 에 .
및 를 포함하는 것을 허용하지 않을 수 있습니다. ..
유일한 요구 사항 POSIX
은 해당 경로에 액세스할 때 예상되는 동작을 달성하는 것입니다.