영숫자와 문자만 포함된 파일을 찾는 방법은 무엇입니까 [áéíóúñ.,¿?¡!()]
?
스크립트나 다른 것과 별도로 보관해야 하는 희박한 일반 텍스트 파일이 몇 개 있습니다. 이는 단지 스페인 시일 뿐이므로 포함되지 않을 것입니다 [#></:]
. 내가 챙길거다
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
공백, 쉼표 등 몇 가지 문자를 추가해야 할 수도 있습니다. 이렇게 하지 않으면 많은 시가 제대로 전달되지 않을 것입니다!