나는 다른 이름을 기반으로 파일을 찾는 방법을 알고 있습니다. 문제는 모든 파일을 한 번에 삭제하는 방법을 모른다는 것입니다. 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
일부 프로세스를 저장하는 대신(일치하는 빈도에 따라 많은 프로세스를 종료할 수 있음) 일부 프로세스를 종료할 수 있습니다 \;
. 경로를 컬렉션으로 수집하고 +
각 경로에 대해 하나의 애플리케이션 호출 대신 하나의 애플리케이션 호출(여기)을 사용하여 적용합니다. 따라서 더 효율적인 솔루션이 없거나 사용하고 싶지 않은 경우 다음을 수행하십시오.-exec
rm
-delete
find . \( -name "*.xml" -o -name "*.ipm" \) -type f -exec rm -iv {} +
답변2
괄호를 사용하면 효과가 있지만 쉘이 이를 하위 쉘 호출로 해석하지 않도록 이스케이프 처리해야 합니다. 백슬래시, \( 및 \) 또는 따옴표를 사용할 수 있습니다.
파일 이름에 줄 바꿈이나 기타 제어 문자가 포함되어 있지 않은 경우(누군가 악의적인 의도를 갖고 있지 않은 경우) 가장 빠르고 -print0 및 -가 필요하지 않은 xargs 방법에 대한 파이프를 사용할 수 있습니다. 0개의 옵션