1

Я пытался сделать простой скрипт, который берет путь к файлу или папке и копирует его, сохраняя полный путь, в папку с именем 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

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

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

Новые файлы, созданные из пути /home/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 path, но затем я не могу создать файл, потому что есть папка с тем же именем.

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

0