grep 출력을 rm에 공급

grep 출력을 rm에 공급

출력을 grep으로 파이핑하려고 시도했지만 rm쓸모없는 내용이 출력됩니다. 필요한 스위치가 있습니까 rm? 아니면 rm정규식을 직접 제공할 수 있나요?

ls | grep '^\[Daruchini'| rm

rm: 피연산자가 없습니다. 자세한 내용을 보려면 "rm --help"를 시도하세요.

답변1

표준 입력 xargs을 .rm

$ ls | grep '^Dar' | xargs rm

(파일 이름의 특수 문자에 유의하십시오. GNU grep을 사용하십시오.

$ ls | grep -Z '^Dar' | xargs -0 rm

)

또한 셸에서는 정규식을 사용하지 않지만 이는 간단한 패턴입니다.

$ rm Dar*

(그리고 잠을 더 자야 할 것 같아요.)

답변2

출력을 구문 분석하지 않습니다.ls.

이 시점에서 쉘이 원하는 파일을 쉽게 필터링하도록 할 수 있습니다. 패턴을 확장하는 것은 명령 Dar*이 아니라 쉘이라는 점에 유의하십시오 . rm쉘이 수행하는 패턴 확장을 이라고 합니다.와일드카드.

rm Dar*

더 복잡한 경우에는 명령을 찾으십시오 find.

답변3

출력을 매개변수로 전달하려면 xargs에 익숙하지 않기 때문에 while 루프를 사용하는 경향이 있습니다.

ls | grep '^Dar' | while read line; do rm "$line";done;

답변4

Catalina 10.15.3에서 zsh를 사용하여 개행과 공백을 처리하는 방법은 다음과 같습니다.

 sudo find / | grep -i 'yourString' | tr '\n' '\0' | xargs -0 -n1 rm -r 

즉, "rm -0"을 사용하여 새 줄을 제거하기 전에 공백 없이(tr \n에서 \0으로) 새 줄을 번역하세요.

또한 "find -iname"은 때때로 아무것도 출력하지 않기 때문에 항상 "find" + "grep -i"를 사용합니다.

마지막 참고 사항: "yourString"과 일치하는 파일과 폴더를 찾아 삭제합니다. 파일의 경우에만 "find -type f"를 지정하면 rm 옵션 "-r"은 효과가 없습니다.

관련 정보