와일드카드 폴더 이름에서 파일을 찾고 해당 와일드카드 폴더에서 파일 수를 계산하는 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...
000000
이 find
명령 에서 제외하고 싶습니다 . 그게 가능합니까? 어떤 팁이 있나요?
감사해요.
답변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
의 옵션 은-newermt
GNUdate -d
및touch -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