linux find 명령은 확장자 없이 알 수 없는 확장자를 가진 파일 이름을 찾습니다.

linux find 명령은 확장자 없이 알 수 없는 확장자를 가진 파일 이름을 찾습니다.

다음 명령을 사용하여 파일 이름을 인쇄하고 싶지만 확장명이 포함된 파일 이름이 인쇄됩니다.

find . -type f -printf '%f\n'

내 디렉토리에는 확장자가 다른 파일이 많이 있습니다. --ignore='*.*'전후에 추가를 시도했지만 -printf성공하지 못했습니다. 예: myfile1.txt, myfile2.mp3 등의 파일이 있습니다. myfile1, myfile2 등을 인쇄하려면 필요합니다. 어떻게 해야 합니까?

답변1

내가 올바르게 이해했다면 (아니요. 답변의 두 번째 부분을 참조하세요.), 점 문자가 포함된 파일 이름을 나열하지 않으려고 합니다.

이렇게 하면 됩니다:

find . -type f ! -name '*.*'

파일 이름 와일드카드 패턴은 *.*점이 하나 이상 포함된 모든 파일 이름과 일치합니다. 위의 내용은 !일치의 의미를 무효화합니다. 즉, 끝에 도달한 경로 이름은 이름에 점이 없는 파일의 경로 이름이 됩니다. 존재하다정말 늙었어!쉘 에서 탈출 \!(또는 Unix 설치 업데이트)을 원할 수도 있습니다 . 외로운 사람은 !전화하지 마세요bash역사적인 확장 시설.

GNU를 사용하여 발견된 경로 이름의 파일 이름 부분만 인쇄하십시오 find.

find . -type f ! -name '*.*' -printf '%f\n'

표준 find(또는 GNU find)의 경우:

find . -type f ! -name '*.*' -exec basename {} \;

루프 내에서 명령 대체에 사용하기 전에 "찾기 결과를 반복하는 것이 왜 나쁜 습관입니까?".


이름의 마지막 점 뒤의 모든 항목을 제거하면서 모든 파일 이름을 나열하려면("확장자 제거") 다음을 사용할 수 있습니다.

find . -type f -exec sh -c '
    for pathname do
        pathname=$( basename "$pathname" )
        printf "%s\n" "${pathname%.*}"
    done' sh {} +

이는 모든 파일에 대해 발견된 모든 경로 이름을 짧은 쉘 루프로 보냅니다. 이 루프는 각 경로명을 가져와 호출하여 basename경로명의 파일명 부분을 추출한 다음 마지막 점 뒤의 모든 항목이 제거된 결과 문자열을 인쇄합니다.

매개변수 확장은 " ${pathname%.*}값 끝에서 가장 짧은 문자열 일치(텍스트 뒤에 오는 리터럴 포인트) 제거"를 의미합니다. 파일 이름의 마지막 점 뒤의 파일 이름 접미사를 제거하는 효과가 있습니다..*$pathname

자세한 내용은 find ... -exec ... {} +""find"의 -exec 옵션 이해".

답변2

Linux에는 파일 확장자 같은 것이 없습니다. 파일 이름의 A는 의미 .가 없습니다..첫 번째숨겨진 파일로 식별하는 파일 이름의 문자).

또한 내 시스템의 매뉴얼 페이지를 확인해도 옵션이 find표시되지 않습니다 .--ignore

.즉, 이름에 a가 포함된 파일을 무시하려면 find' -not연산자를 사용할 수 있습니다.

find -type f -not -name '*.*' -print

답변3

다른 사람들이 지적했듯이 "확장"은 Unix 시스템에서 아무 의미도 없습니다. 그러나 간단한 명령을 사용하여 목록에서 해당 항목을 제거할 수 있습니다 sed.

예를 들어

find * -type f -print | sed 's/\.[^.]*$//'

디렉토리가 있고 목록에 표시되지 않도록 하려면 다음을 수행하십시오.

find * -type f -printf "%f\n" | sed 's/\.[^.]*$//'

단일 디렉토리의 경우 ls대신 사용할 수 있습니다find

ls | sed 's/\.[^.]*$//'

답변4

노력하다

find . -type f \! -name '*.*' -print

어디

  • \!: 그렇지 않습니다(!를 이스케이프해야 함)
  • name '*.*': 확장자를 포함한 파일 이름

관련 정보