Sincronize duas pastas e, no sucesso, copie um arquivo de um local para outro

3

Estou usando o comando rsync para sincronizar duas pastas e no sucesso do rysnc Eu quero copiar o sucesso de um arquivo e ao copiar o parâmetro append source folder name como Success_FolderName.Estou usando $ (basename!: 3) para obter o terceiro parâmetro ou seja, nome da pasta.

bash /Sync.sh 10_03_2016

#! /bin/bash

set -o history
set -o histexpand
/usr/bin/rsync -avh -r /Source/$1 /Destination/
rsyncStatus=$?
folderParam=$(basename !:3)
if($rsyncStatus==0)
then
   cp /Status/Sucesss   /Result/Success_$folderParam
else
    cp /Status/Failure   /Result/Failure_$folderParam
if

Saída

Erro

/Sync.sh: line 7: :3: bad word specifier 

E o arquivo é copiado com 'Sucesso _'

    
por HDev007 12.10.2016 / 12:30

2 respostas

3

Eu não entendo porque você está fazendo isso tão complexo. Por que usar o recurso de expansão do histórico !:N quando você já tem tudo o que precisa ser passado como argumento? Por exemplo:

#! /bin/bash

source="/Source/$1"
destination="Destination/"
folderParam="$(basename "$source")"
/usr/bin/rsync -avh -r "$source" "$destination"
rsyncStatus=$?
if($rsyncStatus==0)
then
   cp /Status/Sucesss   /Result/Success_"$folderParam"
else
    cp /Status/Failure   /Result/Failure_"$folderParam"
if

Ou ainda mais simples:

#! /bin/bash

source="/Source/$1"
destination="Destination/"
folderParam="$(basename "$source")"
if /usr/bin/rsync -avh -r "$source" "$destination"; then
   cp /Status/Sucesss   /Result/Success_"$folderParam"
else
    cp /Status/Failure   /Result/Failure_"$folderParam"
if

Ou até mesmo:

#! /bin/bash

source="/Source/$1"
destination="Destination/"
folderParam="$(basename "$source")"
touch "/Result/Failure_$folderParam"
/usr/bin/rsync -avh -r "$source" "$destination" && 
    mv /Result/Failure_"$folderParam" /Result/Success_"$folderParam"
    
por 12.10.2016 / 12:51
3

A resposta de Terdon é melhor, mas se você realmente quiser usar os operadores de histórico, você pode especificar qual comando você quer se referir a:

!rsync:3

será substituído pelo terceiro parâmetro com a última invocação rsync . Então, no seu caso,

folderParam=$(basename !rsync:3)
    
por 12.10.2016 / 13:00