특정 파일 이름 패턴과 일치하지 않는 파일 수를 표시합니다.

특정 파일 이름 패턴과 일치하지 않는 파일 수를 표시합니다.

아래와 같이 비표준 및 표준 파일 이름이 있습니다. 비표준 파일 수를 가져와야 합니다..

표준 파일 이름: XYZ알파벳.txt,XYZ알파벳.csv, *.msg

비표준 파일 이름: 989875.txt 또는 myname.csv; 경계가 없으며 무엇이든 가능합니다.

유일하게 좋은 점은 표준 항목을 알고 있으며 간단한 find 명령에 NOT 조건만 수행하면 된다는 것입니다. 나는 무엇을 해야 합니까? 파일 루프 등을 수행하는 데 관심이 없습니다.

답변1

주어진

$ ls
 989875.txt   myname.csv  'some long.msg'   XYZABC.csv   XYZABC.txt

그 다음에

$ find . ! \( -name 'XYZABC.*' -o -name '*.msg' \)
.
./myname.csv
./989875.txt

예를 들어

$ find . -type f ! \( -name 'XYZABC.*' -o -name '*.msg' \) -printf '1' | wc -c
2

답변2

파일을 나열 하고 기준을 충족하지 않는 파일을 제외하도록 ls -1수행할 수 있습니다 . grep -v개수만 원하므로 파이프를 통해 wc -l개수를 얻을 수 있습니다. 예를 들어

ls -1 | grep -v XYZABC | wc -l

유일한 문제는 첫 번째 행도 포함한다는 것입니다. 즉, total개수에서 1을 빼거나 출력을 tail +2before 으로 보낼 수 있습니다 wc.

egrepas를 사용하여 여러 모드를 처리할 수 있습니다.

ls -1 | egrep -v "(XYZABC|.msg)" | tail +2 | wc -l

관련 정보