find
특정 경우에 이 명령이 파일을 삭제하지 않는 이유를 이해하려고 합니다 . 다음 명령이 있습니다.
find C:\\path\\to\\Pictures\\pmcctv -name cap_*.jpg
-o -name cap_*.ogg -o -name cap_*.flv -o -name cap_*.mp4 -o -name cap_*.webm -mtime +7
내가 기대하는 파일을 반환합니다.
C:\path\to/Pictures/pmcctv/cap_20160915T193251_620067800.jpg
C:\path\to/Pictures/pmcctv/cap_20160915T193322_742708800.jpg
C:\path\to/Pictures/pmcctv/cap_20160916T081046_394767500.jpg
C:\path\to/Pictures/pmcctv/cap_20160916T081125_615129600.jpg
C:\path\to/Pictures/pmcctv/cap_20160916T081129_503678200.jpg
C:\path\to/Pictures/pmcctv/cap_20160916T081255_842394600.jpg
C:\path\to/Pictures/pmcctv/cap_20160916T161008_693586800.jpg
C:\path\to/Pictures/pmcctv/cap_20160916T161012_749396800.jpg
C:\path\to/Pictures/pmcctv/cap_20160916T161043_774132200.jpg
C:\path\to/Pictures/pmcctv/cap_20160916T161150_497251900.jpg
C:\path\to/Pictures/pmcctv/cap_20160916T161154_437379600.jpg
C:\path\to/Pictures/pmcctv/cap_20160916T161337_350955300.jpg
C:\path\to/Pictures/pmcctv/cap_20160916T161341_452596000.jpg
C:\path\to/Pictures/pmcctv/cap_20160916T161412_870774000.jpg
C:\path\to/Pictures/pmcctv/cap_20160916T161443_969064400.jpg
C:\path\to/Pictures/pmcctv/cap_20160916T161554_468109900.jpg
C:\path\to/Pictures/pmcctv/cap_20160916T161558_378086000.jpg
C:\path\to/Pictures/pmcctv/cap_20160916T161916_668433100.jpg
이제 :를 사용하여 동일한 명령을 실행하려고 하면 -delete
파일이 삭제되지 않습니다.
find C:\\path\\to\\Pictures\\pmcctv -name cap_*.jpg -o -name cap_*.ogg
-o -name cap_*.flv -o -name cap_*.mp4 -o -name cap_*.webm -mtime +7 -delete
나는 또한 시도했지만 -exec rm
제거되지 않았습니다.
find C:\\path\\to\\Pictures\\pmcctv -name cap_*.jpg -o -name cap_*.ogg
-o -name cap_*.flv -o -name cap_*.mp4 -o -name cap_*.webm -mtime +7 -exec rm {} \;
find
오류가 반환되지 않으며 파일은 권한 644를 가진 제가 소유하고 있습니다.
원인이 무엇인지 아시나요?
(참고: 더 읽기 쉽게 명령을 제거했지만 일반적으로 줄 바꿈은 없습니다.)
답변1
연결은 연산자보다 더 긴밀하게 결합됩니다 -o
. 따라서 귀하의 명령은 다음과 같습니다.
find C:\\path\\to\\Pictures\\pmcctv \( -name cap_*.jpg \) -o \
\( -name cap_*.ogg \) -o \
\( -name cap_*.flv \) -o \
\( -name cap_*.mp4 \) -o \
\( -name cap_*.webm -mtime +7 -delete \)
cap_*.webm
그리고 일주일이 지난 일치하는 파일만 삭제됩니다.
또한 현재 디렉터리에 패턴과 일치하는 파일이 있는 경우 패턴은 일치하는 파일 목록으로 대체됩니다. 패턴이 현재 디렉터리의 파일과 정확히 일치하는 경우 하위 디렉터리에 있는 동일한 이름의 파일만 일치하며, 두 개 이상의 파일과 일치하면 구문 오류가 발생합니다.
당신이 찾고있는 명령은
find C:\\path\\to\\Pictures\\pmcctv \
\( -name 'cap_*.jpg' -o -name 'cap_*.ogg' -o -name 'cap_*.flv' -o -name 'cap_*.mp4' -o -name 'cap_*.webm' \) \
-mtime +7 -delete
다음과 같이 단축할 수 있습니다.
find C:\\path\\to\\Pictures\\pmcctv \
-regex '.*/cap_[^/]*\.\(jpg\|ogg\|flv\|mp4\|webm\)' \
-mtime +7 -delete
또는 zsh를 사용할 수 있습니다. 특히글로벌 예선 m
수정 시간별로 파일을 일치시킵니다.
rm C:\\path\\to\\Pictures\\pmcctv/**/cap_*.(jpg|ogg|flv|mp4|webm)(md+7)