2~3자 길이의 숨겨진 파일 이름을 찾는 방법

2~3자 길이의 숨겨진 파일 이름을 찾는 방법

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

findBash CentOS 8의 GNU 버전 4.6.0:

find . -type f -name '.??' -o -name '.???'

이렇게 하면 2~3개의 문자가 포함된 숨겨진 파일을 찾을 수 있습니다.

.캐릭터 중 하나로 간주되는 경우 :

find . -type f -name '.?' -o -name '.??'

관련 정보