6

簡単なバックアップスクリプトを作成しようとしていますが、名前の現在の日付でフォルダーを作成するのに問題があります

私のスクリプトはそれであり、基本的に問題は最後の行にあります

drivers=$(ls /media/)

declare -i c=0
for word in $drivers
do
    echo "($c)$word"
    c=c+1
done

read -n 1 drive
echo

c=0
for word in $drivers
do
    if [ $c -eq $drive ]
    then
        backuppath="/media/$word/backup"
    fi
    c=c+1
done


echo "doing back up to $backuppath"

cp -r /home/stefanos/Programming $backuppath/$(date +%Y-%m-%d-%T)

Ouput:

(0)0362-BA96
(1)Data
(2)Windows
0
doing back up to /media/0362-BA96/backup
cp: cannot create directory `/media/0362-BA96/backup/2012-12-05-21:58:37': Invalid argument

/ media /0362-BA96/まで存在するパスが3回チェックされます

解決済み: janiszが最終的なスクリプトはどのように見えるかを言いましたか

drivers=$(ls /media/)

declare -i c=0
for word in $drivers
do
    echo "($c)$word"
    c=c+1
done

read -n 1 drive
echo

c=0
for word in $drivers
do
    if [ $c -eq $drive ]
    then
        backuppath="/media/$word/backup"
    fi
    c=c+1
done
echo "doing back up to $backuppath"

backup(){
  time_stamp=$(date +%Y_%m_%d_%H_%M_%S)
  mkdir -p "${backuppath}/${time_stamp}$1"
  cp -r "${1}" "${backuppath}/${time_stamp}$1"

  echo "backup complete in $1"
}

#####################The paths to backup####################

backup "/home/stefanos/Programming"
backup "/home/stefanos/Android/Projects"
backup "/home/stefanos/Dropbox"
4

2 に答える 2

18

次のように変更してみてください:

time_stamp=$(date +%Y-%m-%d-%T)
mkdir -p "${backuppath}/${time_stamp}"
cp -r /home/stefanos/Programming "${backuppath}/${time_stamp}"
于 2012-12-05T20:09:06.243 に答える
14

:FATでは無効です(ディスクを指定するために使用されます)。一部のM$無効文字はGNU/Linuxシステムで機能しますが、それらを回避する方が安全です(に置き換えるだけ.です)。次の日付形式を使用する

date +%Y_%m_%d_%H_%M_%S

ほとんどのファイルシステムで動作するはずですが、MSDOSFATには長すぎる可能性があります。詳細については、こちらをご覧ください

于 2012-12-05T20:55:08.860 に答える