두 번째 문자가 숫자인 현재 디렉터리의 모든 파일을 나열하는 방법은 무엇입니까? [복사]

두 번째 문자가 숫자인 현재 디렉터리의 모든 파일을 나열하는 방법은 무엇입니까? [복사]

나는 ls ?[0-9]*이것을 시도했고 이것은 현재 디렉터리의 모든 파일과 일치하지만 현재 디렉터리의 모든 디렉터리를 확장하고 모든 하위 디렉터리의 파일과 일치합니다. *가 현재 디렉터리에만 일치하도록 하고 싶습니다.

---- Program output --------------------------------
f1
f2
g2t
g3t

d2:

d4:

--- Expected output (text)---
d2
d4
f1
f2
g2t
g3t

여기서 d2와 d4는 디렉터리이고 나머지는 파일입니다. d2: 및 d4가 아닌 d2 및 d4로 나열되기를 원합니다.

답변1

?[0-9]* 오직이름으로 확장현재의두 번째 문자가 숫자인 디렉터리입니다. ls, 디렉토리 이름을 얻을 때 해당 디렉토리의 내용이 분명히 표시됩니다. 즉, ls이 작업을 수행하지 않도록 지시해야 함을 의미합니다.

다음을 사용하여 이 작업을 수행할 수 있습니다 ls -d.

ls -d -- ?[0-9]*

또는

ls -d ./?[0-9]*

--파일 이름이 대시로 시작하면 파일 이름의 첫 번째 문자를 옵션으로 해석 하지 ./않습니다 .ls

디렉터리가 아닌 항목에만 관심이 있고 디렉터리의 심볼릭 링크도 지우고 싶은 경우 이를 수행하는 두 가지 확실한 방법이 있습니다.

  1. 쉘 루프를 사용하여 각 이름을 테스트하여 디렉터리인지 확인하고 그렇지 않은 경우 이름을 표시합니다.

    for name in ?[0-9]*; do
        [ ! -d "$name" ] && printf '%s\n' "$name"
    done
    

    점으로 시작하는 파일(숨겨진 파일)을 포함하기 위해 쉘에는 dotglob루프( shopt -s dotglobin bash) 전에 설정할 수 있는 쉘 옵션이 있을 수 있습니다.

  2. find현재 디렉터리에서 디렉터리가 아닌 항목을 찾는 데 사용됩니다 (그리고 디렉터리에 대한 심볼릭 링크를 지웁니다).

    find -L . -maxdepth 1 ! -type d -name '?[0-9]*'
    

    -Lmake 옵션은 find모든 -type d기호 링크의 대상을 참조합니다(현재 경로 이름이 기호 링크인 경우).

답변2

정규식을 사용하여 다음과 같이 ls를 egrep으로 파이프할 수 있습니다.

ls | egrep '.\d.*'

관련 정보