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

Я использую команду 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) 
  • Как безопасно искать $ HOME / .bashrc?
  • компиляция оболочки nginx не выполняется
  • Терминал не вызывает «then», сообщает синтаксическую ошибку, а команда не найдена
  • Как завершить скрипт оболочки?
  • seq - неверная ошибка аргумента с плавающей запятой
  • Папка псевдонимов исполняемых файлов с добавленным ключевым словом
  • Как добраться домой, учитывая ПОЛЬЗОВАТЕЛЬ?
  • Как разобрать XML в CSV с помощью сценария оболочки?
  • Как захватить форматирование текста в bash?
  • Мне нужна помощь с командой «at»
  • Как подождать по программе, запущенной в другой оболочке
  • Interesting Posts

    Не удалось распознать продукт Intel + nvidia optimus hdmi

    Подключение к университетскому WiFi с использованием wpa_supplicant с использованием идентификатора и пароля

    Почему в моей системе Fedora 14 с интегрированным графическим контроллером Intel Mobile GME965 / GLE960 возникает неправильное соотношение сторон?

    перезаписан перезапуск .bashrc

    guvcview записывает аудио, но только первый кадр видео

    Могу ли я остановить Linux от прослушивания USB-устройства ввода в качестве клавиатуры, но все-таки захватить события программой?

    Запуск rng-tools в гостевой системе SLES в VirtualBox

    Что такое lvmetad и почему я хочу или должен его использовать?

    Стохастическая версия seq для генерации последовательности случайных чисел / слов?

    Копирование файлов с разными именами из разных каталогов

    Переименовать USB Sound device

    Разница между компиляцией источника и установочным пакетом?

    Установка Unity на RHEL 7 / Горизонтальные рабочие пространства (Grid) на Gnome 3.14.2

    Откат всех пакетов apt-get до максимума, доступных под фактическим sources.list

    Компиляция для старых версий Debian

    Linux и Unix - лучшая ОС в мире.