영숫자만 포함된 파일을 찾는 방법은 무엇입니까?

영숫자만 포함된 파일을 찾는 방법은 무엇입니까?

영숫자와 문자만 포함된 파일을 찾는 방법은 무엇입니까 [áéíóúñ.,¿?¡!()]?

스크립트나 다른 것과 별도로 보관해야 하는 희박한 일반 텍스트 파일이 몇 개 있습니다. 이는 단지 스페인 시일 뿐이므로 포함되지 않을 것입니다 [#></:]. 내가 챙길거다

sudo find . -type f -not -path '*/.??*/*' -exec file {}  \; \
  | grep ": Unicode text, UTF-8 text"$ \
  | cut -d: -f1 \
  | while read file; do 
     grep -iv '[a-z0-9\.\/_\-áéíóúñ]' "$file" || echo $file
    done

하지만 줄이 일치하므로 전체 파일을 일치시켜야 합니다.

편집: 적어도 나에게 효과가 있었던 것은 다음과 같습니다.

sudo find . -type f -not -path "*/.Trash-*/*" -not -path '*/.??*/*' -exec file {} \;|
grep ": Unicode text, UTF-8 text"$|
cut -d: -f1|
while read file do 
grep -ivq "^[a-z0-9\.\/_\-\ \,\"áéíóúñ\!¿¡?\(\)]*$" "$file"||
echo "$file">>/tmp/textlocation ; done

^와 $를 추가하는 간단한 솔루션이 차이를 만듭니다. 여기에 나열된 -L 솔루션이 작동하고 더 우아할 수 있지만 내 솔루션이 해당 작업을 수행했습니다.

답변1

내가 올바르게 이해했다면 GNU를 사용하여 grep다음 파일을 검색 할 수 있습니다.불일치[#></:]문자 집합:

$ grep -Lr '[#></:]'
  • -L패턴과 일치하지 않는 파일을 나열합니다

    -L, --files-without-match는
    일반 출력을 억제하고 대신 일반적으로 인쇄되지 않는 각 입력 파일의 이름을 인쇄합니다. 검색은 첫 번째 일치에서 중지됩니다.

  • -r재귀적으로 검색합니다.

    -r, --recursive
    명령줄에 있는 경우에만 기호 링크를 따라 각 디렉터리 아래의 모든 파일을 반복적으로 읽습니다. 파일 피연산자가 제공되지 않으면 grep은 작업 디렉토리를 검색합니다. 이는 -d 재귀 옵션과 동일합니다.

-Z파일 나열 이외의 작업을 수행해야 하는 경우에도 이 옵션을 추가할 수 있습니다.

답변2

다음 옵션을 시도해 보겠습니다 -q. <Quiet; 표준 출력에 아무 것도 쓰지 않습니다. 일치하는 항목이 발견되면 오류가 감지되더라도 상태 0으로 즉시 종료됩니다. »

이렇게 하면 아무것도 인쇄되지 않고 반환 코드를 얻을 수 있습니다.

또한 영숫자만 포함하는 줄은 "^[a-z0-9\.\/_\-áéíóúñ]*$" (with ^, *$)이므로 다음을 입력합니다.

grep -ivq "^[a-z0-9\.\/_\-áéíóúñ]*$" || echo $file

공백, 쉼표 등 몇 가지 문자를 추가해야 할 수도 있습니다. 이렇게 하지 않으면 많은 시가 제대로 전달되지 않을 것입니다!

관련 정보