rm에 grep 출력 제공


47

grep출력 을 파이프하려고 rm하지만 쓸모없는 것을 출력합니다. 어떤 스위치가 필요 rm합니까? 아니면 rm정규 표현식을 직접 제공 할 수 있습니까?

ls | grep '^\[Daruchini'| rm

rm : 피연산자 누락 자세한 내용은`rm --help '를 시도하십시오.


항상 복사-붙여 넣기 오류 메시지. (향후 독자의 편의를 위해 실제 오류 메시지를 삽입했지만이 경우 가능한 오류 메시지가 하나뿐이므로이 작업 만 수행 할 수 있습니다. 대부분의 경우 문제를 이해하려면 정확한 오류 메시지 가 있어야합니다. 따라서 모든 오류 메시지를 항상 전체를 복사하여 붙여 넣기하십시오.)
Gilles 'SO- 악기 중지'

답변:


57

xargs표준 입력을에 대한 인수로 변환하는 데 사용해야 합니다 rm.

$ ls | grep '^Dar' | xargs rm

(파일 이름에는 특수 문자를 사용하십시오; GNU grep을 사용하면

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

)

또한 쉘은 정규 표현식을 사용하지 않지만 간단한 패턴입니다.

$ rm Dar*

(그동안 잠이 더 필요하다고 생각합니다.)


2
질문을 한 사람이 질문을 게시했을 때 실수하지 않았다고 가정하면, 자신이 rm Dar*아닌 rm !(Dar*).
Gilles 'SO- 악의를 멈춰라'

... 그렇습니다, 나는 zsh ^모드 에 갇혔습니다 ( basg !사물 과 비슷합니다 ).
geekosaur

1
+1 큰 대답, 비트 | tr "\n" "\0"전에 추가 해야했습니다 xargs. 이 게시물에서 볼 : stackoverflow.com/questions/20307299/…
Adam Plocher


3

grep공백 대신 개행으로 출력을 구분 xargs하려면 -d옵션 을 통해 출력을 지정할 수 있습니다 .

$ ls | grep '^Dar' | xargs -d '\n' rm

( 질문에 설명 된대로 )


2

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

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

이것은 내 경우에 일한 유일한 것입니다.
marbel

0

나에게 가장 좋은 명령은 다음과 같습니다.

find ./Daruchini* -exec rm {}\;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.