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

Я использую команду 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) 
  • Тест на существование функции, которая может работать как на bash, так и на zsh?
  • Плагин мониторинга отправителя для Nagios
  • Возврат значения из функции bash
  • Добавить кавычки и запятую к каждому слову в файле
  • Как искать и заменять текст во всех php-файлах в каталоге и в его подкаталогах
  • Как проверить, присутствует ли какой-либо IP-адрес в файле с использованием сценариев оболочки?
  • копирование определенных файлов в каталог
  • Функция bash для обработки файла через symlink: проблема с аргументами командной строки
  • Используя sed с herestring (<<<) и прочитайте -a
  • Как получить PID подпроцесса через родительский процесс в сценарии оболочки bash?
  • Bash: Родной способ избавиться от цитаты вокруг каждого элемента массива
  • Interesting Posts

    Выполнение команд в процессе повышенного bash путем записи на стандартный ввод его родительского скриптового процесса

    Расположение и содержимое выходного файла на основе списка файлов

    Не удалось установить терминал Nautilus

    Сценарии оболочки POSIX и настройка производительности

    Как извлечь и установить .deb без команды dpkg?

    Фильтрация вывода журнала на отдельных линиях

    При установке виртуального бокса на 64-разрядную машину kali linux 2.0 мне нужно установить среду chroot?

    Как изменить заголовок команды при запуске сервера?

    org.eclipse.swt.SWTError: больше ручек во время запуска eclipse на ubuntu

    почему мой php-скрипт медленнее на debian, чем freebsd?

    Скрипт для запуска приложения с выделенной графической картой (Fedora 25)

    подготовка диска USB для загрузки

    Перемещение нескольких файлов из нескольких каталогов в исходный адрес

    Что означает 2> & 1 в этой команде?

    Проблемы при попытке выполнить sh-файл из другого sh-файла

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