와일드카드에서 제외하려면 find를 사용하십시오(*).

와일드카드에서 제외하려면 find를 사용하십시오(*).

와일드카드 폴더 이름에서 파일을 찾고 해당 와일드카드 폴더에서 파일 수를 계산하는 bashscript 명령이 있습니다. 계산에서 제외하려는 테스트 폴더가 있습니다.

이건 내 명령이야

echo $(date "+%b %_d")
echo "$today"
sr_today=$(find /mnt/data/project_data/web_collab/mailbox/*/sr_pdf/*.pdf -type f -ls | grep "$today" | wc -l)

메일박스 폴더에 다음과 같은 파일이 있습니다.
000000
111111
222222
333333
so on...

000000find명령 에서 제외하고 싶습니다 . 그게 가능합니까? 어떤 팁이 있나요?

감사해요.

답변1

GNU 사용 find:

#!/bin/sh

dir='/mnt/data/project_data/web_collab/mailbox/'

sr_today=$(find "$dir" \
             ! -path '*/000000/*' \
             -newermt '12am today' \
             -ipath '*/sr_pdf/*.pdf' |
           wc -l)
  • GNU find의 옵션 은 -newermtGNU date -dtouch -d.man find-newerXY

  • 마지막 -ipath조건자는 대소문자를 구분하지 않으므로 *.PDF, *.pDf 등과 일치합니다. 불행하게도 sr_pdf 디렉토리를 일치시킬 때 대소문자를 구분하지 않습니다. 예를 들어, 일치시키지 않으려는 SR_PDF 하위 디렉터리가 있고 모든 .pdf파일 확장자가 소문자인 -ipath것이 확실한 경우 -path.

    또는 대소문자를 구분하는 sr_pdf경로 일치 및 대소문자를 구분하지 않는 *.pdf파일 일치 의 경우 -ipath이 줄을 다음으로 바꿉니다.

      -path '*/sr_pdf/*' \
      -iname '*.pdf' | 

답변2

먼저, 이렇게 긴 경로를 사용하려면 고유한 변수 이름을 지정하는 것이 좋습니다. 코드를 읽기 쉽게 만들고, 오타 없이 어디서나 동일한 이름을 사용하고, 필요할 때 더 쉽게 변경할 수 있도록 하세요.

MAILBOX=/mnt/data/project_data/web_collab/mailbox

수백 개 미만의 PDF 파일을 처리해야 하는 경우 다음을 시도해 보십시오.

echo "${MAILBOX}"/*/sr_pdf/*.pdf | grep -v /00000/ | grep "$today" | wc -l

보다 일반적인 해결 방법을 원하면 다음을 수행하십시오.

find "${MAILBOX}" -path '*/sr_pdf/*.pdf' | grep -v /00000/ | grep "$today" | wc -l

관련 정보