때로는 명령이 완료될 때까지 기다리지 않고 많은 양의 임시 파일을 재귀적으로 삭제하고 디렉터리 이름을 재활용하고 싶을 때가 있습니다. (예를 들어 버전 관리 작업 복사본을 삭제하고 체크아웃하려는 경우입니다.)
자주 발생하지는 않지만, 이런 일이 발생하면 대개 다음과 같은 명령을 사용합니다.
mv "$oldname" dienow && rm -rf dienow &
물론 이에 대한 함수나 별칭을 만들 수 있지만 그렇지 않은 경우 위 내용을 더 짧게 표현할 수 있는 방법이 있습니까?
답변1
나는 두 가지 별도의 명령을 사용하겠습니다.
mv "$oldname" dienow
rm -rf dienow
이렇게 하면 기록에서 실수로 한 줄을 불러온 경우 단일 명령을 실행하여 심각한 피해를 입힐 위험이 없습니다. 이 mv
명령은 새 버전이더라도 삭제되지 않으며, 삭제하겠다고 선언한 것만 삭제됩니다."$oldname"
rm
운이 좋아서 단일 명령만 사용해야 한다면 함수로 만드세요.
mv_then_rm () {
mv -- "$1" "$1.TO_BE_DELETED" && rm -rf -- "$1.TO_BE_DELETED" &
}
이는 "삭제할" 디렉터리가 이미 존재하지 않도록 보장하는 다중 인수 버전입니다.
mv_then_rm () {
local d tmpdir tmpdirs
tmpdirs=()
for d; do
tmpdir=$(mktemp -- "$(dirname -- "$d")/.deleting.XXXXXXXXXX")
tmpdirs+=$tmpdir
mv -- "$d" "$tmpdir"
done
rm -rf -- "$tmpdirs" &
}
답변2
당신은 "$oldname's" 엔터테인먼트를 놓치고 있습니다.
mv "$oldname" dienow && mkdir "$oldname" && \rm -rf dienow &
나는 누군가가 rm을 rm -i로 별칭을 붙인 경우 \rm을 사용하는 것을 선호합니다.
경로를 명확하게 만들고 구성 파일에 함수로 추가하세요.
clean_old_now(){
\mv "$oldname" dienow && mkdir "$oldname" && \rm -rf dienow &
}
실수로 이런 일이 일어날까봐 걱정된다면 팁을 추가하세요.
clean_old_now(){
read -p "Are you sure?: " sure
if [[ $? = 0 ]] && [[ "$sure" = "y" ]]; then
\mv "$workdir/$oldname" $workdir/dienow && mkdir "$workdir/$oldname" && \rm -rf $workdir/dienow &
fi
}
명시적 경로를 추가할 때 데이터가 복사되지 않도록 mv가 동일한 파일 시스템에 있는지 확인하세요.
답변3
ㅏ매우실용적인 접근 방식은 디렉토리를 /tmp로 이동하고 시스템 재부팅이 나머지 작업을 수행하도록 하는 것입니다. 또는 정기적으로(한 시간에 한 번) 정리하는 cronjob을 설정하십시오.
mv "$oldname" /tmp/forgetme
cronjob으로
0 * * * * rm -rf /tmp/forgetme