rmv라는 안전한 삭제 명령 인 "Sams 'Teach Yourself Linux in 24 Hours"에서 bash 스크립트를 적용하려고합니다. 파일은 rmv -d file1 file2 등을 호출하여 제거됩니다. 원본 스크립트에서 변수 $ 1 $ 2 $ 3 $ 4를 사용하여 최대 4 개의 파일을 제거 할 수 있습니다. 와일드 카드를 사용하여이 파일을 무제한으로 확장하려고합니다. 그래서 내가 할 :bash의 와일드 카드에서 문자열 제외
for i in $*
do
mv $i $HOME/.trash
done
파일 괜찮 삭제되지만 명령 RMV -d의 옵션 -d는 인수로 취급되고, bash는 그것을 찾을 수 없다는 객체. 이 작업을 수행하는 더 좋은 방법이 있습니까?
감사합니다, 피터
#!/bin/bash
# rmv - a safe delete program
# uses a trash directory under your home directory
mkdir $HOME/.trash 2>/dev/null
# four internal script variables are defined
cmdlnopts=false
delete=false
empty=false
list=false
# uses getopts command to look at command line for any options
while getopts "dehl" cmdlnopts; do
case "$cmdlnopts" in
d) /bin/echo "deleting: \c" $2 $3 $4 $5 ; delete=true ;;
e) /bin/echo "emptying the trash..." ; empty=true ;;
h) /bin/echo "safe file delete v1.0"
/bin/echo "rmv -d[elete] -e[mpty] -h[elp] -l[ist] file1-4" ;;
l) /bin/echo "your .trash directory contains:" ; list=true ;;
esac
done
if [ $delete = true ]
then
for i in $*
do
mv $i $HOME/.trash
done
/bin/echo "rmv finished."
fi
if [ $empty = true ]
then
/bin/echo "empty the trash? \c"
read answer
case "$answer" in
y) rm -i $HOME/.trash/* ;;
n) /bin/echo "trashcan delete aborted." ;;
esac
fi
if [ $list = true ]
then
ls -l $HOME/.trash
fi
또한 :'d) echo -e "삭제 : \ n" "$ {@ : 2}"; delete = true ;;'- 이것은 Bash의 내장 echo를 사용합니다 (왜'/ bin/echo'를 사용합니까?) 모든 파일 이름을 인쇄합니다. 그리고 이것은 기능의 변경을 더 잘 나타낼 것입니다 :'echo "rmv -d [elete -e [mpty] -h [elp] -l [ist] file [...]";;' –
원한다면 원격으로 안전하다. PE ("$ foo"가 아닌 $ foo)를 인용하고 인수를 유지하는 방법을 배우는 것이 좋습니다. $ *를 사용하지 말고 항상 "$ @"을 사용하십시오. 이 충고에 유의하지 않으면; 특히 'rm'할 때; 당신은 잘못된 명령을 곧 삭제할 올바른 명령을 찾을 수 있습니다. – lhunath