Скопируйте файлы и папки с полным путем в Linux Bash

287
edoelas

Я хотел создать простой скрипт, который берет путь к файлу или папке и копирует его, сохраняя полный путь, в папку, которая называется systemрядом со скриптом.

Пример: Представьте, что у меня просто есть эти папки в моей системе:

/home/my_user/copy_script /home/my_user/folder1/file1 /home/my_user/folder1/file2 /home/my_user/file3 

Если я передам в качестве аргументов пути, /home/my_user/folder1и /home/my_user/file3я хочу получить эту структуру папок в качестве вывода:

Файлы перед запуском скрипта

/home/my_user/copy_script /home/my_user/folder1/file1 /home/my_user/folder1/file2 /home/my_user/file3 

Новые файлы, созданные из / дома / my_user / Folder1 пути

/home/my_user/system/home/my_user/folder1/file1 /home/my_user/system/home/my_user/folder1/file2 

Новые файлы, созданные из / дома / my_user / file3 пути

/home/my_user/system/home/my_user/file3 

Идея иметь копию файлов конфигурации в папке, которая будет синхронизироваться с gitlab, сохраняя ту же структуру, что и моя система.

Мой сценарий до сих пор выглядит так:

#!/bin/bash  #need to implement relative paths #https://stackoverflow.com/questions/3963716/how-to-manually-expand-a-  special-variable-ex-tilde-in-bash/29310477#29310477  #clears the old folder rm -r ./system  #goes through all the arguments for var in "$@" do #It is a folder if [[ -d $var ]]; then mkdir -p "$PWD/system/$var" cp -R $var "$PWD/system/$var/.." echo "$var FOLDER" #It is a file elif [[ -f $var ]]; then mkdir -p "$PWD/system/$var" cp -R $var "$PWD/system/$var/.." echo "$var FILE" #The path is not ok else echo "$var ERROR" fi done 

Когда это папка, я думаю, что она отлично работает:

Пример:

С той же структурой папок, что и в начале, когда мы вызываем copy_script /home/my_user/folder1

Сначала создает /home/my_user/system/home/my_user/folder1путь

Затем копирует folder1в/home/my_user/system/home/my_user/

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

Пример:

вызов copy_script /home/my_user/file3создаст /home/my_user/system/home/my_user/file3путь, но тогда я не могу создать файл, потому что есть папка с тем же именем.

Может ли кто-нибудь любезно объяснить мне, как это сделать? Благодарю.

1
Вы пробовали `rsync -r. target_folder / `? l0b0 5 лет назад 1
Я не знал о существовании этого инструмента, спасибо, вот ответ, который я искал. edoelas 5 лет назад 0

0 ответов на вопрос

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