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.
Tags command-line bash linux path