다른 이름을 기반으로 파일을 찾아 한 줄에 모두 삭제하는 방법 [복제]

다른 이름을 기반으로 파일을 찾아 한 줄에 모두 삭제하는 방법 [복제]

나는 다른 이름을 기반으로 파일을 찾는 방법을 알고 있습니다. 문제는 모든 파일을 한 번에 삭제하는 방법을 모른다는 것입니다. z/OS390에서 OMVS를 사용하고 있습니다.

다른 확장자로 검색된 파일을 찾기 위해 다음을 성공적으로 수행했습니다.

find . -name "*.xml" -o -name "*.ipm" -type f

하나의 이름으로만 검색한 후 파일을 삭제하려면 다음을 성공적으로 수행했습니다.

find . -name "*.xml" -type f -exec rm -iv {} \;

음, 이 두 가지 아이디어를 혼합하면 성으로 찾은 파일만 삭제하겠습니다.

find . -name "*.xml" -o -name "*.ipm" -type f -exec rm -iv {} \;

이 경우 첫 번째 패턴( )과 일치하는 파일은 *.xml의 영향을 받는 것으로 보입니다 -exec rm.

검색해 보니 문제는 내가 찾은 모든 이름을 "유지"해야 한다는 것입니다.앞으로실행 rm. 세 가지 방법을 시도했지만 성공하지 못했습니다.

첫 시도:

$ find . -name "*.xml" - o -name "*.ipm" -type f -print0 | xargs -0
FSUM6372 Unknown option "-"
Usage: find directory ... expression
xargs: FSUM6001 Unknown option "-0"

Usage: xargs Ý-l#¨Ý-L #¨ Ý-irepl¨Ý-I repl¨ Ý-n#¨ Ý-tpx¨ Ý-s#¨ Ý-eeof¨Ý-E eof¨ Ýc
md Ýargs ...¨¨

두 번째 시도:

$ find . (-name "*.xml" - o -name "*.ipm") -type f
FSUM7332 syntax error: got (, expecting Newline

세 번째 시도:

$ find . -type f \(-name "*.xml" -o -name "*.ipm"\)
FSUM6372 Unknown option "(-name"
Usage: find directory ... expression

답변1

대괄호 시도에서 주위에 공백이 누락되어 find라는 옵션이 표시되지만 (-name어떻게 해야 할지 모릅니다. 대신 대괄호 주위에 공백을 추가하세요. 예를 들면 다음과 같습니다.

find . \( -name "*.xml" -o -name "*.ipm" \) -type f -exec rm -iv {} \;

또는 GNU가 있는 경우 다음을 find사용할 수 있습니다 .-delete-exec rm -iv {} \;

+와일드카드에서 알 수 있듯이 인수 목록을 받을 수 있는 명령을 실행하고 있으므로 를 사용하여 -exec일부 프로세스를 저장하는 대신(일치하는 빈도에 따라 많은 프로세스를 종료할 수 있음) 일부 프로세스를 종료할 수 있습니다 \;. 경로를 컬렉션으로 수집하고 +각 경로에 대해 하나의 애플리케이션 호출 대신 하나의 애플리케이션 호출(여기)을 사용하여 적용합니다. 따라서 더 효율적인 솔루션이 없거나 사용하고 싶지 않은 경우 다음을 수행하십시오.-execrm-delete

find . \( -name "*.xml" -o -name "*.ipm" \) -type f -exec rm -iv {} +

답변2

괄호를 사용하면 효과가 있지만 쉘이 이를 하위 쉘 호출로 해석하지 않도록 이스케이프 처리해야 합니다. 백슬래시, \( 및 \) 또는 따옴표를 사용할 수 있습니다.

파일 이름에 줄 바꿈이나 기타 제어 문자가 포함되어 있지 않은 경우(누군가 악의적인 의도를 갖고 있지 않은 경우) 가장 빠르고 -print0 및 -가 필요하지 않은 xargs 방법에 대한 파이프를 사용할 수 있습니다. 0개의 옵션

관련 정보