Загрузка файлов на удаленный сервер и пакетное переименование

Вы можете сопоставить эти файлы с помощью простого шаблона оболочки и флага--relative(-R)для сохранения путей к файлам в месте назначения:

rsync -avR src/./201?/*bbb*.pdf dst/

Пример запуска с использованием ваших данных

rsync -avR src/./201?/*bbb* dst/
created directory dst
sending incremental file list
2016/
2016/aaabbb1.pdf
2016/aaabbb2.pdf
2017/
2017/aaabbb1.pdf
2017/aaabbb2.pdf

Вы можете проверить, что произойдет, используя rsync --dry-run.

0
24.04.2021, 00:26
1 ответ

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

Сохраните карту файлов в файлеfilemap.txt:

$ cat << EOF > filemap.txt
1/1/1/file.jpg -> 2/3/4/image1.jpg
2/12/2/file.jpg -> 5/6/7/image2.jpg
3/31/31/file.jpg -> 8/9/1/image3.jpg
EOF

Затем используйте этот сценарий для создания временного выходного каталога с именем temp, который будет содержать подкаталоги -, соответствующие целевым путям вашей карты файлов. Каждое имя исходного файла, в свою очередь, будет жестко -связано с соответствующим путем назначения в каталоге temp. Как только tempбудет полностью заполнен, он будет rsyncизменен на user:ip, а затем удален с локальной машины.

#!/usr/bin/env bash

srcD="/folder/"
destD="/dir/"

rm   -rf temp

while read  src X dest
do

        dir="$(dirname "$dest")"

        mkdir -p "temp/$dir"
        ln "$srcD$src" "temp/$dest"

done < filemap.txt

rsync -av temp/ user@ip:"$destD"

rm -rf temp
1
28.04.2021, 22:51

Теги

Похожие вопросы