안전하게 파일 검색 및 삭제

안전하게 파일 검색 및 삭제

nohup.out마운트된 파일 시스템의 모든 항목을 검색한 후 삭제하고 싶습니다 .

  1. 파일명에 공백이 포함된 디렉토리와 파일이 몇몇 있어서 생각해보니 xargs -0.

  2. 안전을 위해 대화형으로 삭제하고 싶습니다. 즉, 정말로 삭제하고 싶은지 물어보세요. 그래서 나는 그것에 대해 생각 rm -i했고xargs -p

  3. 발견한 파일 하나하나를 개별적으로 삭제하고 싶은 마음도 있어서 xargs -n 1.

하지만 아래 명령은 내가 원하는 대로 작동하지 않습니다.

locate  -i nohup.out | xargs -0 -n 1 -p rm -i

각 파일을 삭제하고 권한을 요청하라는 메시지가 표시되지 않습니다.

왜 그리고 어떤 명령이 원하는 대로 작동하는지 알고 싶습니다.

그건 그렇고, 내 xargs 버전은 xargs (GNU findutils) 4.4.2입니다. 이것이 이유일까요?

답변1

사용 find하지 않음locate

find . -name "nohup.out" | xargs -n 1 -p rm

추가할 때 프롬프트 rm -i에 대한 입력 역할을 합니다.-p

find이 방법을 사용할 수도 있습니다

find . -name "nohup.out" -exec rm -i {} \;

답변2

하지만 아래 명령은 내가 원하는 대로 작동하지 않습니다.

locate -i nohup.out | xargs -0 -n 1 -p rm -i

물론, 하나를 사용하는 경우 xargs -0일치해야 합니다 locate -0.

각 파일을 삭제하고 권한을 요청하라는 메시지가 표시되지 않습니다. 이유를 알고 싶어요

xargs/dev/tty메시지가 표시되면 입력 내용을 읽어야 합니다. 이 방법은 xargsstdin 읽기 매개변수를 사용한 응답 locate과 읽기 옵션 사이에 충돌이 없도록 작동합니다 -p.

그러나 명령은 표준 입력에서 읽을 입력도 읽으려고 합니다 xargs. 따라서 입력의 일부를 소비하고 예상대로 작동하지 않습니다.rm -irm -ixargs

내가 바라는 대로 어떤 명령이 작동할까요?

Bash를 사용하는 경우 다음 옵션이 있습니다.

xargs -a <(locate -0 -i nohup.out) -0 -n 1 -p rm -i

그러나 find에서 모든 작업을 수행할 수도 있습니다.

find / -depth -name nohup.out -ok rm -i '{}' ';'

여러 파일을 한 번에 삭제하려면 ';'을 '+'로 변경하세요. 이 요구 사항과 이 문제를 해결하는 다양한 방법은 다음에서 설명됩니다.findutils용 Texinfo 매뉴얼.

답변3

대화형 동작을 원하고 프롬프트에 xargs를 사용하려면 다음을 수행할 수 있습니다.

locate  -i nohup.out | xargs -d '\n' -L1 -p rm

답변4

POSIX적으로:

find /path/to/mounted_fs -xdev -type f -name nohup.out -exec rm -i {} +

-xdevfind마운트된 파일 시스템에서만 검색 합니다. -exec rm -i {} +예전처럼 사용 xargs하지만 파일 이름에 특수 문자가 있어도 문제가 없습니다.


명령에 문제가 있습니다.

locate -i nohup.out | xargs -0 -n 1 -p rm -i

입력 구분 기호로 xargsbut 을 사용하라고 했지만 출력은 그렇지 않으므로 출력 은 하나의 큰 문자열로 처리 됩니다 .\0locate\0\nxargslocate

관련 정보