패턴과 일치하는 파일 삭제


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.