использование scp переименование всех файлов

Я отправляю файлы с одного сервера на другой с помощью scp. Мне нужно переименовать файлы после отправки этого. Так что я использую следующую команду для каждого файла

scp original-hc.db user@host:/dir/original-hc_1.db 

Я хочу отправить все файлы с помощью одной команды с переименованием файлов. подобно

 scp *.db user@host:/dir/(actual file name before extension)_1.db 

Пожалуйста помоги.

Этого можно легко добиться с помощью петли

 for f in *.db do scp "$f" user@host:/dir/"${f%.db}"_1.db done 

Конструкция ${f%.db} удаляет суффикс .db из $f .

scp не может переименовывать файлы, поэтому вам нужно будет использовать какой-либо другой инструмент в дополнение или вместо этого.

Если у вас есть доступ к SFTP, а не только доступ к SCP, вы можете использовать SSHFS, чтобы удаленные файлы отображались на вашем локальном компьютере. Это позволяет использовать любой инструмент копирования и переименования файлов.

 mkdir mnt sshfs user@host:/dir pax -rw -pe -s'/\.db$/_1.db/' *.db mnt fusermount -u mnt 

Вместо pax (который POSIX, но иногда не установлен по умолчанию в Linux, хотя он всегда доступен как пакет), вы можете использовать GNU или BSD tar, zsh zsh и т. Д. Или просто цикл, который выполняет копию:

 for x in *.db; do cp -p "$x" "mnt/${x%.db}_1.db" done 

Вы можете использовать метод цикла, даже если у вас нет SSHFS, но тогда вы должны использовать scp в цикле.

 for x in *.db; do scp -p "$x" "user@host:/dir/${x%.db}_1.db" done 

Настройка соединения SSH для каждого времени может быть немного медленной. С OpenSSH вы можете открыть соединение один раз, а затем контрейлерные. См. Использование уже установленного SSH-канала

Другой метод (требующий полного доступа к оболочке на сервере) заключается в архивировании файлов и копировании архива и применении шага переименования при архивировании или извлечении. Например, если у вас есть GNU tar локально (что всегда имеет место для не встроенных Linux и часто доступно, возможно, как gtar , в других вариантах unix):

 tar -cf - --transform '/\.db$/_1.db/ *.db | ssh user@host 'cd /dir && tar -xf -' 

С помощью BSD tar замените --transform на -s . Если у вас очень ограниченный tar, но GNU tar или BSD tar на сервере, вы можете сделать переименование на стороне сервера.

Возможно, вы захотите вставить шаг сжатия, если пропускная способность сети является узким местом. С помощью метода архива вы можете вставить шаги в конвейер:

 tar -czf - --transform '/\.db$/_1.db/ *.db | ssh user@host 'cd /dir && gunzip | tar -xf -' 

Или вы можете выполнить сжатие на уровне SSH, передав параметр -C в ssh , sshfs или scp .