이름에 하위 문자열이 포함되어 있지 않으면 파일 삭제

이름에 하위 문자열이 포함되어 있지 않으면 파일 삭제

폴더의 파일을 삭제하려면 다음 명령을 사용하고 있습니다. 하지만 내 명령은 모든 것을 삭제하는 것입니다.

ionice -c 3 find . -type f -print -delete

접미사가 있으면 파일을 삭제하고 싶지 않습니다 _y.

내 폴더 보기는 다음과 같습니다.

123a.jpg -> Should delete
4567.jpg -> Should delete
7644_y.png -> Should not delete
12234_y.jpeg -> Should not delete
5753.jpg -> Should delete

내 명령이 이를 어떻게 달성해야 합니까?

답변1

귀하의 예에 따르면 다음을 포함하는 이름을 제외하고 싶습니다._y 하위 문자열.

find . -type f ! -name '*_y*' -print -delete

( ionice -c 3원한다면 앞에 사용해도 되지만, 무엇을 하든 상관없습니다 find.)

_y기본 이름 끝에 만 파일을 보관하려면 (따라서 12234_y_.jpeg삭제됨) 다음을 사용할 수 있습니다.

find . -type f ! -name '*_y.*' -print -delete

답변2

재귀 하위 디렉터리를 구체적으로 사용하는 경우에는 find이 답변이 적용되지 않습니다. 그러나 현재 디렉터리의 파일만 삭제하는 경우 bash 관련 옵션은 다음과 같습니다.

shopt -s extglob
rm -v !(*_y.*)

이는 패턴과 일치하는 비파일(디렉토리)을 삭제하려고 시도하는 추가적인 제한이 있습니다.

관련 정보