현재 그의 행동은 다음과 같습니다.
1 단계:
locate fooBar
/home/abc/fooBar
/home/abc/Music/fooBar
2 단계:
각 행을 복사하여 붙여 넣어 수동으로 제거를 수행하십시오.
rm /home/abc/fooBar
rm /home/abc/Music/fooBar
한 번에 어떻게해야합니까? 같은 것
fooBar 찾기> rm
감사.
현재 그의 행동은 다음과 같습니다.
1 단계:
locate fooBar
/home/abc/fooBar
/home/abc/Music/fooBar
2 단계:
각 행을 복사하여 붙여 넣어 수동으로 제거를 수행하십시오.
rm /home/abc/fooBar
rm /home/abc/Music/fooBar
한 번에 어떻게해야합니까? 같은 것
fooBar 찾기> rm
감사.
답변:
다른 챕터에서 이미 언급했듯이 xargs가 당신의 친구입니다. 이 도구는 정말 강력한 도구이므로 도구를 설명하고 일반적인 문제에 대한 해결 방법을 제공하려고합니다.
xargs는 입력에서 한 줄을 가져 와서 다른 명령에 추가하여 입력의 모든 줄에 대해 다른 명령을 실행합니다. 그래서 입력하여 locate foobar | xargs rm -f
상기 찾아 명령 출력한다 단부 상에 패치 의 rm -f
명령에 의해 생산 라인마다 실행 locate foobar
.
문제 :
그러나 locate에 의해 반환 된 줄에 공백이 있으면 어떻게됩니까? rm -f
rm에 전달 된 인수는 파일이어야하고 (-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'
-0
( --null
) 옵션을 사용하여 xargs를 찾을 수 있습니다 . 이것은 안전한 ASCII NUL 문자를 사용하여 파일 이름을 구분합니다.locate -0 foobar | xargs -0 rm
rm -i
fooBar를 찾습니다 ''