0

フォルダとその内容のコピーを、バックアップ対象のフォルダと同じディレクトリ内のフォルダに配置して、フォルダとその内容をバックアップしたいと思います。バックアップディレクトリにフォルダが再作成されるので、フォルダ名に次の番号を追加したいと思います。例えば:

MainDirectoryの内容:FolderImportant FolderBackup FolderOthers

FolderImportantが別の名前になることはありません。FolderImportantとその内容をFolderBackupにコピーし、(最初のバックアップで)フォルダー名に番号001を追加する必要があります。内容は変更されません。

フォーラムを調べて、バックアップと名前の変更の例をいくつか見つけましたが、bashについてほとんど知らないので、すべてをオールインワンスクリプトに入れる方法がわかりません。

4

3 に答える 3

0

rsyncを見てください。これは、さまざまな戦略でバックアップできる強力なツールです。いくつかの例については、ここをご覧ください。

于 2012-09-12T10:04:01.867 に答える
0

rsyncは素晴らしいです...ここであなたのbashの質問に対する私の答え

#!/bin/bash

dirToBackup=PATH_TO_DIR_TO_BACKUP

backupDest=BACKUP_DIR

pureDirName=${dirToBackup##*/}

for elem in $(seq 0 1000)
do
    newDirName=${backupDest}/${pureDirName}_${elem}
    if ! [ -d $newDirName ]
    then        
        cp -r $dirToBackup $newDirName
        exit 0
    fi
done    
于 2012-09-12T10:50:54.583 に答える
0

bashでのクラッシュコースの後、機能的なスクリプトができました。私はbashスクリプトの学習に6時間もかからないので、このスクリプトを改善するためにできることがあればコメントしてください。

#! /bin/bash

# The name of the folder the current backup will go into
backupFolderBaseName="ImportantFolder_"
# The number of the backup to be appended to the folder name
backupFolderNumber=0
# The destination the new backup folders will be placed in
destinationDirectory="/home/$LOGNAME/.hiddenFolder/projectFolder/backupFolder"
# The directory to be backed up by this script
sourceDirectory="/home/$LOGNAME/.hiddenFolder/projectFolder/ImportantFolder"

# backupDirectory()-------------------------------------------------------------------------------------
# Update folder number and copy source directory to destination directory
backupDirectory() {
cp -r $sourceDirectory "$destinationDirectory/$backupFolderBaseName`printf "%03d" $backupFolderNumber`"
echo "Backup complete."
} #End backupDirectory()--------------------------------------------------------------------------------

# Script begins here------------------------------------------------------------------------------------
if ! [ -d "$destinationDirectory" ];
then
    echo "Creating directory"
    mkdir "$destinationDirectory"
    if [ -d "$destinationDirectory" ];
    then
        echo "Backup directory created successfully, continuing backup process..."
        backupDirectory
    else
        echo "Failed to create directory"
    fi
else
echo "Existing backup directory found, continuing backup process..."
for currentFile in $destinationDirectory/*
    do
        tempNumber=$(echo $currentFile | tr -cd '[[:digit:]]' | sed -e 's/^0\{1,2\}//')
        if [ "$tempNumber" -gt "$backupFolderNumber" ];
        then
            backupFolderNumber=$tempNumber
        fi
    done
    let backupFolderNumber+=1
backupDirectory
fi #End Script here-------------------------------------------------------------------------------------
于 2012-09-13T01:04:25.267 に答える