Linux 시스템에서 이름이 2~3자인 숨겨진 파일을 찾고 싶습니다.
나는 시도했다:
ls .?[a-zA-Z][a-zA-Z]
ls .??[a-zA-Z]
나도 그것을 시도했지만 find . -name "???"
각각 find . -name "??"
3자와 2자를 포함하는 파일 이름만 표시됩니다.
답변1
숨겨진 파일 이름은 항상 점으로 시작됩니다. 2자 길이(첫 번째 점 포함)의 숨겨진 파일 이름은 과 일치하고 .?
, .??
3자 길이의 숨겨진 파일 이름은 일치합니다.
다음과 같은 이름을 원한다고 가정해 보겠습니다.일반 파일, 디렉토리 및 기타 파일 형식 대신 다음을 사용할 수 있습니다.
find . -type f \( -name '.?' -o -name '.??' \)
현재 디렉토리 안이나 아래에서 이름이 숨겨져 있고 2~3자 길이의 일반 파일을 찾습니다.
쉘을 사용 bash
하고 현재 디렉토리의 이름에만 관심이 있는 경우:
shopt -s nullglob
for name in .? .??; do [[ -f $name ]] && printf '%s\n' "$name"; done
이는 두 패턴(있는 경우) 중 하나와 일치하는 모든 이름을 반복하고 일반 파일 또는 일반 파일에 대한 심볼릭 링크에 해당하는 이름을 인쇄합니다.
nullglob
쉘 옵션을 설정하면 bash
패턴이 어떤 이름과도 일치하지 않는 경우 확장되지 않은 채로 남아 있는 것이 아니라 완전히 제거됩니다.
이 두 가지 모드는 에서 extglob
셸 옵션을 설정하여 결합 할 수 있습니다 (또는 가 될 수도 있지만 약간 혼란스럽습니다) .bash
.?
.??
.@(?|??)
.??(?)
zsh
셸 에서는 glob 한정자를 통해 패턴이 일반 파일에만 일치하도록 할 수 있으므로 루프가 필요하지 않습니다.
printf '%s\n' .(?|??)(.)
여기에는 (.)
이름 일치를 일반 파일로만 제한하는 globbing 한정자가 있습니다.
답변2
find
Bash CentOS 8의 GNU 버전 4.6.0:
find . -type f -name '.??' -o -name '.???'
이렇게 하면 2~3개의 문자가 포함된 숨겨진 파일을 찾을 수 있습니다.
.
캐릭터 중 하나로 간주되는 경우 :
find . -type f -name '.?' -o -name '.??'