텍스트 출력을 (리디렉션)하여 /dev/null
제거할 수 있습니다. bash 코드에서 쉽게 활성화/비활성화할 수 있기 때문에 매우 편리합니다.
이제 파일을 처리하고 처리한 후 다른 대상으로 이동하는 스크립트가 있습니다. 간단한 예는 다음과 같습니다.
source_dir=some/source/path
target_dir=some/target/path
for f in `ls $source_dir`; do echo $f; mv $f $target_dir; done
이제 더 이상 파일을 대상 디렉터리로 이동하는 데 관심이 없고 오히려 파일 방향을 제거하기로 결정한 경우 이를 수행하는 가장 효율적인 방법은 무엇입니까(편집된 코드 줄 측면에서)?
mv
또한 명령을 변수에 넣는 것을 고려할 수도 있습니다 .
process_cmd=echo
finnish_cmd=mv
source_dir=some/source/path
target_dir=some/target/path
for f in `ls $source_dir`; do $process_cmd $f; $finnish_cmd $f $target_dir; done
그런 다음 나중에 다음과 같이 변경할 수 있습니다.
process_cmd=echo
finnish_cmd=rm
source_dir=some/source/path
target_dir=
for f in `ls $source_dir`; do $process_cmd $f; $finnish_cmd $f $target_dir; done
그러나 결국 자동으로 정리되는 쓰레기 같은 대상 디렉터리를 지정할 수 있다면 더 간단할 것이라고 생각합니다 /dev/null
(이것이 명령 rm
의 의미 입니다).mv
process_cmd=echo
finnish_cmd=mv
source_dir=some/source/path
target_dir=/dev/null # <--- is there some sort of trash folder for such tasks?
for f in `ls $source_dir`; do $process_cmd $f; $finnish_cmd $f $target_dir; done
이와 같은 상황에 대한 명확한 접근 방식/일반적인 모범 사례가 있습니까?
답변1
그런 장소가 없는 데에는 아주 간단한 이유가 있습니다. 아무 소용이 없기 때문입니다. 전 세계적 으로 사용할 수는 mv
있지만 rm
. 그러므로 /dev/null
그것은 욕구를 충족시키기 때문에 존재하는 것이지, 욕구 /dir/garbage
를 충족시키지 않아서 존재하는 것이 아니다.
물론 이 경우 "이를 달성하는 가장 효율적인 방법은 무엇입니까(편집된 코드 줄의 측면에서)?"라는 질문을 해결해야 한다고 주장할 수 있습니다. 삭제 target_dir
된 정의는 다음과 같습니다.
if [ -n "$target_dir" ]; then
# move file
else
# delete file
fi
매우 간단하며 아무것도 다시 편집할 필요가 없습니다. (내 생각에는 "편집"이 당신의 뜻이 아닌 것 같습니다.유지하다또는 "더 쉬운 유지 관리"라는 이름으로 어색하고, 해악적이고, 잘못된 방식으로(더 나쁘게는 의사 영리하게) 무언가를 수행하는 것은 모순이기 때문에 행 수를 줄이십시오.
즉, 매 시간마다 다음과 같은 cron 작업을 실행하여 자신만의 휴지통 디렉토리를 상당히 쉽게 구현할 수 있습니다.
garbage_dir=/usr/local/garbage
for file in $garbage_dir/*; do
rm -f -R $file;
done
답변2
/tmp
나는 당신이 단지 디렉토리를 찾고 있다고 생각합니다 . 대부분의 경우 여기에 입력한 내용은 다음에 재부팅할 때 삭제됩니다. 세부사항은 특정 운영 체제에 따라 다르며 변수 값에 의해 제어됩니다 $TMPTIME
. 많은 배포판의 경우 설정이 0이므로 기본 설정은 /tmp
모든 부팅을 지우는 것입니다. $TMPTIME
전부는 아니지만 대부분의 배포판에서 이는 파일에 설정됩니다 /etc/default/rcS
.
따라서 다음과 같이 하십시오(참고로 나는 쉘 글로빙을 사용하고 있으며아니요분석 ls
):
process_cmd=echo
finish_cmd=mv
source_dir=some/source/path
target_dir=/tmp
for f in $source_dir/*; do $process_cmd "$f"; $finish_cmd "$f" $target_dir; done