이름에 특정 임계값보다 큰 숫자가 포함된 디렉터리 검색

이름에 특정 임계값보다 큰 숫자가 포함된 디렉터리 검색

이것은 조건이 첨부된 수정하려는 명령입니다.

find /home/user/backups/ -mindepth 2 -maxdepth 3 -name "*~EEEE000.tif" -print

이것은 다음의 출력입니다 ls /home/user/backups/.

backup20170101_somerandomstring
backup20170115_somerandomstring
backup20170230_somerandomstring
backup20170305_somerandomstring
backup20170408_somerandomstring
backup20170521_somerandomstring
.
.
.
backup20190111_somerandomstring
backup20190130_somerandomstring
backup20190209_somerandomstring
backup20190301_somerandomstring
backup20190303_somerandomstring
backup20190311_somerandomstring
backup20190313_somerandomstring
backup20190412_somerandomstring
.
.
.
backup20200102_somerandomstring
backup20200103_somerandomstring
backup20200105_somerandomstring
backup20200110_somerandomstring
.
.
.

2019-03-10 이후에 생성된 디렉토리만 검색하고 싶습니다. 그러므로 이는 다음과 같이 쉽게 이해될 수 있다.목차 이름에 있는 숫자가 20190310단어 뒤의 숫자 보다 큽니다.backup.

생각할 수는 있지만 seqfind와 함께 사용하는 방법을 모르겠습니다. 더 나은 옵션이 있다고 확신합니다.

seq -f "backup%1.0f" 20190310 20200131

답변1

zsh셸을 사용하면 파일 이름 와일드카드 패턴이 <n-m>숫자 범위 n( m포함)와 일치합니다.

무늬

/home/user/backups/backup<20190311->_*

/home/user/backups문자열로 시작 backup하고 그 뒤에 20190311같거나 그보다 큰 숫자, 밑줄 및 가능한 경우 더 많은 문자가 오는 모든 이름 과 일치합니다 .

디렉터리만 일치:

/home/user/backups/backup<20190311->_*(/)

원래 find명령과 함께 이것을 사용하십시오.

find /home/user/backups/backup<20190311->_*(/) \
    -mindepth 1 -maxdepth 2 -name "*~EEEE000.tif" -print

이는 glob과 일치하는 모든 디렉토리에서 ~EEEE000.tif(특정 디렉토리 깊이에서)로 끝나는 파일 또는 디렉토리의 이름을 검색합니다. 찾은 경로 이름을 인쇄합니다. 검색 경로 루트의 추가 깊이를 고려하여 검색 깊이가 조정되었습니다.

None find, 일반 파일의 이름만 인쇄합니다.

print -rC1 -- \
    /home/user/backups/backup<20190311->_*/*'~EEEE000.tif'(.ND) \
    /home/user/backups/backup<20190311->_*/*/*'~EEEE000.tif'(.ND)

그러면 경로에 있는 디렉터리에 대한 기호 링크도 확인됩니다.

관련 정보