이름에 "WIDTHxLENGTH"가 포함된 디렉터리의 파일을 반복적으로 삭제합니다.

이름에 "WIDTHxLENGTH"가 포함된 디렉터리의 파일을 반복적으로 삭제합니다.

thumbnail-name_WIDTHxLENGTH.{jpg,png}하위 디렉터리가 포함된 디렉터리가 있고 이름이 where WIDTHLENGTH이며 모두 10진수인 box-image-150x150.jpg이미지 를 삭제하고 싶습니다 circle-image-320x320.png. 따라서 기본적으로 x숫자가 포함된 jpg/png 입니다 .

답변1

# Old school way for directory-walking: find (emacs regex; use `(jpg|png)` on BSD find)
# use -iregex for case-insensitive
find some/dir -regex '.*[0-9]+x[0-9]+.\(jpg\|png\)' -delete
# ksh93, zsh & bash: globstar + brace expansion + extglob
# for ksh, use `set -o globstar` first; for bash, use `shopt -s globstar extglob nullglob` first.
# TODO: Too lazy to write zsh cshnullglob and case-insensitive globs
rm -- **/*[0-9]x+([0-9]).{jpg,png}

답변2

"정규식"이라는 용어는 (일반적으로) 명령줄에서 파일을 선택하는 데 적용되지 않습니다. 1   기술 용어는 와일드카드, 패턴 일치 또는 와일드카드 확장이라고도 하는 경로 이름 확장입니다. 말씀하신 내용을 바탕으로 첫 번째 답변 시도는 다음과 같습니다.

rm -- *[0-9]x[0-9]*

이름이 다음으로 구성된 현재 디렉터리의 모든 파일을 삭제합니다.

  • 임의( *) 다음에
  • 숫자( [0-9]), 그 뒤에
  • 이 편지 x뒤에는
  • 또 다른 숫자( [0-9]), 그 뒤에
  • 아무것( *).

--로 끝나는 이름으로부터 당신을 보호 할 수 있습니다 -. 그렇게 하시기를 강력히 권고합니다.

ls -ld -- *[0-9]x[0-9]*

먼저 어떤 파일이 일치하여 삭제되는지 확인하세요. 일치하는 파일이 원하는 파일이 아닌 경우 를 사용하여 적어도 하나의 세 자리 숫자와 다른 세 자리 숫자를 포함하는 파일 *[0-9][0-9][0-9]x[0-9][0-9][0-9]*만 가져옵니다 . x및/또는 해당 확장자를 가진 파일로 명령을 제한하기 위해 .jpg끝에 추가(즉, 사용 )한 다음 를 사용하여 명령을 반복합니다 . 또는 다음을 사용하십시오.*[0-9]x[0-9]*.jpg.png

RM-나-- *[0-9]x[0-9]*

rm각 파일을 확인하라는 메시지가 표시됩니다 .

"디렉토리가 포함된 디렉터리입니다. 모두 jpg가 있습니다." 디렉터리 트리를 검색해야 하는 경우 한 가지 방법은 다음을 입력하는 것입니다.

shopt -u globstar

그런 다음 **/와일드카드를 추가합니다. 예를 들어 다음과 같습니다.

rm -i -- **/*[0-9]x[0-9]*

하위 디렉터리 트리를 검색하는 또 다른 방법은 다음과 같습니다.

find . -name "*[0-9]x[0-9]*" -type f -exec rm -i -- {} +

다음을 입력하여 이 명령을 "미리 볼" 수 있습니다(어떤 파일이 일치하는지 확인).

find . -name "*[0-9]x[0-9]*" -type f -print

다시 말하지만, 일치하는 파일이 너무 많으면 숫자를 추가하거나 확장자를 추가할 수 있습니다.

노트:

  • 명령에서는 와일드카드 문자를 인용해야 합니다 find. 다른 명령에서는 와일드카드 문자를 인용할 수 없습니다.
  • find명령은 이름이 다음으로 시작하는 파일을 자동으로 찾습니다... 당신 shopt -s dotglob이 먼저 입력 하지 않는 한, 누구도 그렇게 하지 않을 것입니다 .
  • find명령은 일반 파일에서만 작동합니다. 왜냐하면 -type f다른 파일의 이름에 . 하지만 앞서 말했듯이 먼저 실행하고 출력을 다시 확인하거나 입력하기 전에 사용하고 생각하십시오.numberxnumberrmlsrm -iy

_________
1에는 find 정규식과 일치하는 기능이 있으며 테스트되었지만 -regex이 문제를 해결하는 데는 필요하지 않습니다.

답변3

xargs와 함께 find를 사용하십시오.

find / -name "*[0-9]*x*[0-9]*.jpg" | xargs /bin/rm -f

편집하다:

find / -name "*[0-9]x[0-9]*.jpg" | xargs /bin/rm -f

또는 아래 주석에 제안된 "authur2e5"와 같습니다.

find some/dir -name "*[0-9]x[0-9]*.jpg" -delete

관련 정보