Copie arquivos e pastas com caminho completo no bash do linux

1

Eu estava fazendo uma bandeja para fazer um script simples que pega um caminho de arquivo ou pasta e copia-o, preservando o caminho completo, em uma pasta chamada system ao lado do script.

Exaple: Imagine que eu só tenho essas pastas no meu sistema:

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

Se eu passar argumentos como os caminhos /home/my_user/folder1 e /home/my_user/file3 , quero obter essa estrutura de pastas como saída:

Arquivos antes de executar o script

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

Novos arquivos criados a partir do caminho / home / my_user / folder1

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

Novos arquivos criados a partir do caminho / home / my_user / file3

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

A idéia de ter uma cópia dos arquivos de configuração em uma pasta que será sincronizada com o gitlab, preservando a mesma estrutura do meu sistema.

Meu script até agora é assim:

#!/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

Quando é uma pasta, acho que funciona bem:

Exemplo:

Com a mesma estrutura de pastas que o início quando chamamos copy_script /home/my_user/folder1

Primeiro, cria o /home/my_user/system/home/my_user/folder1 caminho

Em seguida, copia folder1 em /home/my_user/system/home/my_user/

Mas com arquivos isso não funciona porque cria pastas que eu não preciso e não consigo copiar os arquivos.

Exemplo:

chamar copy_script /home/my_user/file3 criará /home/my_user/system/home/my_user/file3 caminho, mas eu não posso criar o arquivo porque existe uma pasta com o mesmo nome.

Alguém poderia gentilmente me explicar como fazer isso? Obrigado.

    
por edoelas 27.08.2018 / 11:05

0 respostas