필자는 바인드 마운트를 사용하여 여러 논리 볼륨 / 물리적 파티션 / LUN 등을 보유하지 않고도 여러 위치에서 공간을 사용할 수 있도록 돕고 있습니다.
예를 들어 200G LV를 /space
. 거기에서, 나는 하위 디렉토리를 만들 것이다. var_opt
과 var_log
마운트를 바인드 할 수 있습니다. /var/opt
과 /var/log
로 나타났다.
‘space’디렉토리에서 정리를 수행하면 들어오지 못하게 하다 디렉토리의 rm -rf
내부에서 뛰다 /space
?
예:
# pwd
/space
# rm -rf * {except-for-var_opt-and-var_log}
내가 생각하지 못한 것을 이루기 위해 노력하고있는 것을 성취하기위한 다른 (더 간단하지만) 좋은 방법이 있는가?
답변
어쩌면 find + xargs + rm 조합으로?
find /space ! -iregex '(var_opt|var_log)' | xargs rm -f
또는 그 곡의 어떤 것. 물론 xargs가 rm으로 변경하기 전에 echo 같은 더 무해한 것을 실행하도록 지시하는 것이 현명 할 수도 있습니다 …
답변
단순한 개념으로 오류 위험이 적습니다.
mkdir TO_DELETE
mv * TO_DELETE
mv TO_DELETE/var_opt TO_DELETE/var_log .
rm -rf TO_DELETE
ksh의 확장 된 glob을 사용할 수도 있습니다 :
rm -rf !(var_opt|var_log)
이것들은 bash로 가능하게하는 경우에도 사용할 수 있습니다 :
shopt -s extglob
rm -rf !(var_opt|var_log)
zsh의 내용 :
setopt ksh_glob
rm -rf !(var_opt|var_log)
Zsh에는 확장 된 glob가 있습니다.
setopt extended_glob
rm -rf ^var_(opt|log)
답변
입력 파일 이름이 사용자에 의해 생성되는 경우 처리해야합니다.
공백을 포함하는 놀랄만한 파일 이름 ‘또는 “파일 이름에.
사용 xargs
~ 때문에 불쾌한 놀라움으로 이어질 수 있습니다. 분리기 문제 .
GNU 병렬 그 문제는 없습니다.
find /space ! -iregex '(var_opt|var_log)' | parallel -X rm -f
조심해. GNU 병렬 용 소개 비디오 더 배우기.
답변
보존하려는 디렉토리가 마운트 포인트와 정확히 일치하면 사용할 수 있습니다. --one-file-system
GNU에서 rm
.
나는 이것이 어떻게 구현되었는지 조사하지는 않았지만 bind 마운트가 같은 파일 시스템 내에서 이루어 졌다면 이것이 원하는 것을하지 않을 것이라고 생각합니다. rm
~이 없다 --no-act
옵션,하지만 파이프 수 있습니다. yes no | rm -ir .
예를 들면.