위치를 rm으로 파이프 결과


11

나는 달리기를 시도했다

locate *.orig | xargs rm

그러나 그것은 말했다 No such file or directory

나는 그것을하는 방법을 find보았지만 찾기는 객체의 전체 경로를 반환하므로 가능해야합니다.

답변:


20

파일 이름에 공백이 있으면 사용해야합니다

locate -0 $something | xargs -0 rm

에서 locateman 페이지 :

-0, --null각 항목을 별도의 줄에 쓰는 대신 ASCII NUL 문자를 사용하여 출력 항목을 구분하십시오. 이 옵션은 GNU xargs (1)의 --null 옵션과의 상호 운용성을 위해 설계되었습니다.

또는

locate $something | while read f; do rm "$f"; done

또한 *.orig쉘 확장을 피하기 위해 따옴표로 보호 하고 그대로 두어야합니다.


"쉘 확장"이란 무엇입니까?
soldier.moth

두 번째 예는 +1입니다. | while read홈 디렉토리에는 공백이있는 파일로 가득 차 있기 때문에 항상 사용 합니다.
matpie

Soldier.moth @ : 현재 폴더에 패턴에 해당하는 파일이있는 경우 *.orig, 쉘은 말,에 패턴 확장됩니다 file1.orig file2.orig ..., 그래서 locate정확한 문자열을 볼 수 없습니다 *.orig예상대로입니다.
enzotib

또한 grep 찾기 출력을 할 수 있습니다 tr '\n' '\0'.
Pablo Bianchi

2

그건 xargs하지xarg


그것은 내가 기억에서 질문을 입력한다는 의미였습니다. 감사합니다.
soldier.moth

오 그래. 다음에 잘못된 명령을 입력하면 오류가 발생한 것 같습니다. |
maco

0

이 명령 locate *.orig | xargs rm은 실제로 작동하지만 휴지통에서 파일을 locate찾고 있었으며 *.orig휴지통 에서 파일을 삭제하려고 할 때 rm오류가 발생했습니다 No such file or directory.


원래 답변에 "설명"으로 정보를 추가하거나 원래 답변을 편집 할 수 있습니다. 이것은 당신 자신의 질문에 대한 답이 아닙니다.
enzotib

찾기에 휴지통에서 * .orig 파일을 찾았고 rm이 파일을 삭제할 수 없기 때문에 오류가 발생하는 이유는 내 질문에 대한 답변입니다. 나는 당신의 대답을 받아 들였고, 잘 쓰여져 있고 나중에 오는 누군가를 도울 수 있기 때문에 다른 두 가지 대답 모두에 투표했습니다.
soldier.moth

0

locate는 globbing을 수행하지 않지만 쉘은 수행합니다. 쉘은 * .orig를 * .orig와 일치하는 현재 디렉토리에서 찾은 것으로 확장합니다.

그냥 사용

locate .orig

그리고 그것이 당신에게 필요한 것을 얻는다면

locate .orig | xargs rm

또는, enzotib이 언급했듯이

locate -0 .orig | xargs -0 rm

파일 이름에 공백이 있으면


0

속임수 : 모든 경로를 tmp 파일에 저장하십시오. 그런 다음 반복하십시오.

#!/bin/bash
locate .orig /tmp/tmp.txt
while read line
do
    pth=$line
    rm "$pth" 
done < /tmp/tmp.txt

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