bin 폴더에 대한 간단한 백업 프로그램을 만들었습니다. 효과가있다. 아래 코드와 결과 STDOUT. rsync를 사용하여 로컬 ~/bin 폴더에서 /media/username/code/bin 폴더로 복사합니다. 결과 가 하나만 있을 때 코드는 잘 작동 mount | grep media
하지만 mount/grep
. 결과에 공백이 없으므로 ?로 구분됩니다. 나는 그것을 시도했고 물론 얻었다for LINE
for
\n
find /media
많은결과. 나는 이것이 갈 길이 아니라고 생각합니다. Ao_Ao
check_media () {
FOUNDMEDIA=$(mount | awk -F' ' '/media/{print $3}')
echo -e "foundmedia \n$FOUNDMEDIA"
echo For Loop
for LINE in $FOUNDMEDIA
do
echo $LINE
done
CHOSENMEDIA="${FOUNDMEDIA}/code/bin/"
echo -e "\nchosenmedia \n$CHOSENMEDIA\n"
exit
}
foundmedia
/media/dee/D-5TB-ONE
/media/dee/DZ61
For Loop
/media/dee/D-5TB-ONE
/media/dee/DZ61
chosenmedia
/media/dee/D-5TB-ONE
/media/dee/DZ61/code/bin/
/code/bin
발견된 미디어에 저장 경로를 추가하는 방법을 볼 수 있지만 여러 결과에 대해 chosenmedia
작동하지 않는 결과가 나타납니다. 백업을 동기화하거나 복원할 미디어를 선택할 수 있기를 원합니다.
답변1
마운트 지점에 공백이 없다고 가정하면 다음과 같은 스크립트를 사용할 수 있습니다.
#!/bin/bash
check_media() {
local found=(_ $(mount | awk '/media/{print $3}'))
local index chosen
until [[ "$chosen" =~ ^[0-9]+$ ]] && [[ "${chosen:-0}" -ge 1 ]] && [[ "${chosen:-0}" -lt ${#found[@]} ]]
do
for ((index=1; index < "${#found[@]}"; index++))
do
printf '%2d) %s\n' $index "${found[$index]}" >&2
done
read -p "Choice (q=quit): " chosen || { echo; return 1; }
[ "$chosen" == q ] && return 1
done
printf '%s\n' "${found[$chosen]}"
}
if chosen=$(check_media)
then
printf 'Got: %s\n' "$chosen"
fi
그러나 전체 내용을 작성하는 경우 다음과 같이 bash
몇 줄로 마무리할 수 있습니다 check_media
.
select chosen in $(mount | awk '/media/{print $3}')
do
printf 'Got: %s\n' "$chosen"
# rsync
break
done