나는 A로 시작하고 2 개의 숫자로 끝나는 파일을 삭제하려고 시도했지만 아무것도하지 않습니다.
내가 시도한 것 :
rm ^A*[0..9]2$
내가 어디 틀렸어?
나는 A로 시작하고 2 개의 숫자로 끝나는 파일을 삭제하려고 시도했지만 아무것도하지 않습니다.
내가 시도한 것 :
rm ^A*[0..9]2$
내가 어디 틀렸어?
답변:
다음 명령을 사용하여 기준과 일치하는 모든 파일을 삭제할 수 있습니다.
ls | grep -P "^A.*[0-9]{2}$" | xargs -d"\n" rm
작동 방식 :
ls
모든 파일을 나열합니다 (결과가 파이프되므로 한 줄에 하나씩).
grep -P "^A.*[0-9]{2}$"
파일 목록을 필터링하고 정규식과 일치하는 파일 만 남겨 둡니다. ^A.*[0-9]{2}$
.*
은 발생 횟수를 나타냅니다 .
. 여기서 .
문자와 일치하는 와일드 카드입니다.
[0-9]{2}
은 정확히 두 개의 어커런스 [0-9]
, 즉 모든 숫자를 나타냅니다 .
xargs -d"\n" rm
파이프로 연결될 rm line
때마다 한 번씩 실행 line
됩니다.
내가 어디 틀렸어?
우선, rm
정규식을 인수로 받아들이지 않습니다. 와일드 카드 외에 *
다른 모든 문자는 그대로 처리됩니다.
또한 정규 표현식이 약간 벗어났습니다. 예를 들어, *
어떤 사건을 의미 ...
정규 표현식에서, 그래서 A*
경기 A
, AA
등, 심지어 빈 문자열을.
자세한 내용은 Regular-Expressions.info를 방문하십시오 .
-d"\n
스위치는 공간 문제를 해결.
grep -P
(Perl 정규식) 이 없습니다 . grep -E
이 경우 작동 할 수 있습니다.
-I
에 xargs
먼저 비 살상 명령을 항상 테스트 :xargs -d"\n" -I {} echo "{}"
또는 사용 find
:
find your-directory/ -name 'A*[0-9][0-9]' -delete
이 솔루션은 이상한 파일 이름을 처리 합니다.
-type f
xargs
와 접근 방식을 rm -f
.
bash 매뉴얼 페이지 의 파일 이름 확장 섹션을 참조하십시오.
rm A*[0-9][0-9]
regexp가있는 솔루션은 200 배 더 좋습니다. 명령을 사용하기 전에 어떤 파일이 삭제되어 최종 파이프가 잘 릴지 알 수 있습니다.
ls | grep -P "^A.*[0-9]{2}$"
그런 다음 올바른 경우 다음을 사용하십시오.
ls | grep -P "^A.*[0-9]{2}$" | xargs -d "\n" rm
Unix로 작업하는 경우 grep 사용법을 알아야합니다. 사용 방법을 알고 있으면 매우 강력합니다.