패턴과 일치하는 파일 삭제


32

파일 이름에 숫자가 있고 'x'와 숫자가 적어도 두 번 오는 모든 하위 디렉토리의 모든 파일을 재귀 적으로 제거해야합니다.

예:

이 파일들을 제거하고 싶습니다 :

'aaa-12x123-123x12.jpg'
'aaa-12x12-123x12-12x123.jpg'

그러나 이러한 파일을 제거하고 싶지 않습니다.

'aaa.jpg'
'aaa-12x12.jpg'
'aaaxaaa-123x123.jpg'
'aaaxaaa-aaaxaaa.jpg'

bash 쉘에서 어떻게 할 수 있습니까?

답변:


61

문자열 x에 숫자와 뒤에 숫자가 포함 된 경우에만 ( x즉, 패턴과 일치하는 하위 문자열이 포함 된 경우) "숫자 뒤에 숫자"가 포함 [0-9]x[0-9]됩니다. 따라서 이름이 pattern과 일치하는 파일을 제거하려고합니다 *[0-9]x[0-9]*[0-9]x[0-9]*.jpg.

find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' -delete

find이없는 경우 -delete전화 rm를 걸어 파일을 삭제하십시오.

find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' -exec rm {} +

2
고맙습니다! 12.000 개의 파일이 2 초 동안 사라졌습니다. 그것은 나에게 약간의 노동을 구했다!
mikkelbreum

Bash on Windows에서 나를 위해 일 하지도 -delete않았습니다 -exec rm. 그러나 이것은 :find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' | xargs rm
Tamlyn

2
@Tamlyn 사용 -print0하고 xargs -0, 그렇지 않으면 명령은 공백이나 작은 따옴표가 포함 된 파일 이름으로 실패합니다. 그러나 -delete-exec rm 수행 Windows에서 작업을. 무언가가 효과가 없다면, 그것들의 사용 때문이 아닙니다.
Gilles 'SO- 악마 그만해'

이것은 Windows에서도 작동합니까?
CodyBugstein

Cygwin 또는 GNUWin32와 같은 Unix 유틸리티 포트가 있으면 작동합니다. 분명히 Windows에서는 즉시 작동하지 않습니다. Windows에 관련없는 프로그램 find이 있는지 확인하므로 Unix 유틸리티가 가장 먼저 사용되도록하십시오 PATH.
Gilles 'SO- 악마 그만'

0

올바른 명령은 다음과 같습니다.

find . -type f -iregex '.*[0-9]x[0-9]*\.jpg$'

이름이 'aaa-12x12.jpg'인 파일 만 가져오고 'aaa-12x12red.jpg'는 가져 오지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.