출력을 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
이 시점에서 쉘이 원하는 파일을 쉽게 필터링하도록 할 수 있습니다. 패턴을 확장하는 것은 명령 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"은 효과가 없습니다.