この関数は、destinationDirectory 内のフォルダー名をループして、ファイル名の末尾にある最大の数値を検索し、その値をインクリメントして、その値を folderNameWithoutNumber の末尾に追加します。か、そうなると思った。バッシュ機能:
$backupFolderNumber=0
$1=$sourceDirectory
$2=$destinationDirectory
$3=$folderNameWithoutNumber
# The values when the function are called
backupDirectory() {
for currentFolder in $2/*
do
backupFolderNumber=$(echo $currentFolder | tr -cd '[[:digit:]]')
done
let backupFolderNumber+=1
cp -r $1 $2/$3$backupFolderNumber
echo "Backup complete."
}
この関数が最初の 10 回呼び出されると、最初の 10 個のバックアップが /path/to/backups/folderName_1、/path/to/backups/folderName_2、... /path/to/backups/folderName_10. 関数が再度呼び出されると、/path/to/backups/folderName_11 は作成されません。
私の最初の質問は、なぜこれが思ったように機能しないのですか (folderName_11 の作成とカウント)?
2 番目の質問は、数値部分を 3 桁の長さ (folderName_001、folderName_002) にするために、ファイル名の前にゼロを含めるようにフォーマットするにはどうすればよいかということです。
3 番目で最後の質問です。宛先には、同じ名前の同じフォルダーのバックアップのみを含める必要があるため、グループ内の最後のフォルダーには最新 (最大) の番号が必要です。なんらかの理由でフォルダがソートされていない場合に、最大数が確実に見つかるようにするにはどうすればよいでしょうか?