binフォルダの簡単なバックアッププログラムを作成しました。効果がある以下のコードと結果STDOUT。 rsync を使用して、ローカルの ~/bin フォルダーから /media/username/code/bin フォルダーにコピーします。結果が1つしかない場合、コードはうまくいき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