로컬 파일 시스템의 파일만 삭제하려면 rm --one-file-system을 사용하십시오.

로컬 파일 시스템의 파일만 삭제하려면 rm --one-file-system을 사용하십시오.

에 FUSE가 설치되어 있지만 /media/writable때때로 이 FUSE 설치 연결이 끊어지지만 일부 프로그램은 여전히 /media/writable​​.

FUSE 마운트 서비스를 다시 시작하면 디렉터리가 비어 있지 않기 때문에 마운트에 실패합니다.

rm 할 때 위치한 위치만 삭제 되도록 하려면 매개변수를 rm어떻게 사용합니까?--one-file-system/media/writable현지의대신 파일 시스템퓨즈 설치파일 시스템? 그 안에 다른 폴더가 있어서 상위 폴더에서는 실행할 /media/수 없습니다 .rm

상위 폴더를 rm할 수 있도록 폴더를 한 수준 아래로 이동하는 것이 더 낫습니까? /media/writable/mount아니면 제거하려는 파일 시스템을 선택할 수 있는 방법이 있습니까?

저는 coreutils 8.28과 함께 Ubuntu 18.04.1 LTS를 실행하고 있습니다.

편집: 나의 현재 접근 방식은 이것이지만 더 나은 방법이 있는지 확인하고 싶었습니다. ExecStartPre=-/bin/mountpoint /media/writable/ || /usr/bin/stat /media/writable/MOUNTED || /bin/rm/ --one-file-system -rf /media/writable/*

답변1

한 가지 방법은 cd디렉토리로 이동하는 것입니다. 정리 스크립트를 실행할 때 디렉토리가 마운트되더라도 여전히 이전 로컬 디렉토리가 표시됩니다(상대 경로만 사용하는 경우).

#! /bin/zsh -
zmodload zsh/stat || exit
cd /media/writable || exit

stat -H parent .. || exit
stat -H here   .  || exit

if (( parent[device] == here[device] )); then
  # current directory is on the same device as parent
  all_files=(*(ND))
  (( $#files == 0 )) ||
    rm -rf --one-file-system --preserve-root=all -- $all_files
fi

Dglob 한정자는 숨겨진 파일도 제거할 수 있으며 해당 파일 중 일부가 다른 파일 시스템의 마운트 지점 인 경우 --preserve-root=all보완적으로 사용할 수 있습니다 (비록--one-file-system$all_files현재 구현에서는 경쟁이 없는 것으로 보이지 않습니다., 그래서 나는 그것을 피할 것입니다 rm -rf --one-file-system --preserve-root=all /media/writable).

여전히 실패할 수 있습니다."매개변수 목록이 너무 깁니다"파일이 많으면 오류가 발생합니다. 다음과 같이 작성하여 문제를 해결할 수 있습니다.

print -rNC1 -- $all_files |
  xargs -r0 rm -rf --one-file-system --preserve-root=all --

관련 정보