Синхронизация двух папок и при успешном копировании одного файла из одного места в другое

Я использую команду rsync для синхронизации двух папок и успеха rysnc. Я хочу скопировать успех файла и при копировании добавить параметр имени исходной папки, такой как Success_FolderName.Я использую $ (basename!: 3), чтобы получить третий параметр, то есть имя папки ,

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 

Вывод

ошибка

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

И файл копируется с 'Success_'

2 Solutions collect form web for “Синхронизация двух папок и при успешном копировании одного файла из одного места в другое”

Я не понимаю, почему вы делаете это настолько сложным. Зачем использовать (довольно сложную) !:N расширения истории !:N когда у вас уже есть все, что вам нужно передать в качестве аргумента? Например:

 #! /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 

Или, еще проще:

 #! /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 

Или даже:

 #! /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" 

Ответ Тердона лучше, но если вы действительно хотите использовать операторы истории, вы можете указать, к какой команде вы хотите обратиться:

 !rsync:3 

будет заменен третьим параметром на последний вызов rsync . Так что в вашем случае,

 folderParam=$(basename !rsync:3) 
  • Получение липкого фонового терминала, работающего на рабочем пространстве bspwm в полноэкранном режиме
  • Ловушка не захватывает SIGTSTP
  • Предотвращать создание сценария при генерации stdout при вызове из данной программы
  • Как использовать глобальные переменные массивы в псевдонимах или функциях
  • Меню Bash с несколькими параметрами в одной строке
  • Использование find -exec и проблемы с перенаправлением стандартной ошибки
  • Почему этот скрипт дает синтаксическую ошибку «Неожиданный конец файла»?
  • Есть ли причина использовать « || команда "вместо" && command "?
  • Как рекурсивно удалить все, кроме списка файлов?
  • Как сравнить день недели?
  • синтаксическая ошибка возле неожиданного токена `<'
  • Linux и Unix - лучшая ОС в мире.