locate에 의해 리턴 된 모든 파일을 삭제하는 방법


13

현재 그의 행동은 다음과 같습니다.

1 단계:

locate fooBar
/home/abc/fooBar
/home/abc/Music/fooBar

2 단계:

각 행을 복사하여 붙여 넣어 수동으로 제거를 수행하십시오.

rm /home/abc/fooBar
rm /home/abc/Music/fooBar

한 번에 어떻게해야합니까? 같은 것

fooBar 찾기> rm

감사.


넌 이걸 원해? rm -i fooBar를 찾습니다 ''
LFC_fan

위의 내용이 확실하지 않습니다. 찾기 명령을 실행할 때 반환되는 경로에서 모든 파일을 제거하고 싶습니다.
theTuxRacer

답변:


13

다른 챕터에서 이미 언급했듯이 xargs가 당신의 친구입니다. 이 도구는 정말 강력한 도구이므로 도구를 설명하고 일반적인 문제에 대한 해결 방법을 제공하려고합니다.

xargs는 입력에서 한 줄을 가져 와서 다른 명령에 추가하여 입력의 모든 줄에 대해 다른 명령을 실행합니다. 그래서 입력하여 locate foobar | xargs rm -f상기 찾아 명령 출력한다 단부 상에 패치rm -f명령에 의해 생산 라인마다 실행 locate foobar.

문제 :

그러나 locate에 의해 반환 된 줄에 공백이 있으면 어떻게됩니까? rm -frm에 전달 된 인수는 파일이어야하고 (-r 스위치를 사용하지 않는 한) 공백이 있으면 파일 경로를 이스케이프하거나 인용해야하기 때문에 명령 이 중단됩니다 .

xargs는 입력을 추가하는 대신 다음 명령으로 입력 을 대체 하기 위해 -i 스위치를 제공합니다 . 제안을 다음으로 변경하겠습니다.

locate foobar | xargs -ixxx rm -f 'xxx'

locate에 의해 반환 된 파일 이름에 아포스트로피가 포함 된 경우에만 중단됩니다.

rm -f 사용에 대해 조심 해야한다는 qbi와 동의해야합니다 ! -p 플래그를 사용하여 xargs하거나 찾기 foobar를 xargs로 보내기 전에 자체적으로 실행하거나 -f를 rm에서 삭제하십시오.

locate foobar | xargs -p -ixxx rm -f 'xxx'

9
이름에 이국적인 문자 (줄 바꿈, 따옴표, 아포스트로피 등)가있는 파일에 대해 강력하게하기 위해 -0( --null) 옵션을 사용하여 xargs를 찾을 수 있습니다 . 이것은 안전한 ASCII NUL 문자를 사용하여 파일 이름을 구분합니다.locate -0 foobar | xargs -0 rm
Jukka Matilainen

1
답글은 +1이며, ^ _ ^
theTuxRacer

나는 그것을 시도했지만 작동하지 않았다.
Pronoy999

부분적으로 작업
SteveS

7

에 사용할 수있는 옵션이 더 필요할 수 있습니다 xargs. 로 먼저 테스트하십시오 xargs -p. 정상이면 -p옵션을 제거하십시오 .

locate foobar | xargs rm

6

locate에 의해 리턴 된 모든 파일을 삭제하려면 터미널에서 다음 명령을 실행하십시오.

locate foobar | xargs rm -f

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