Eu preciso mover alguns diretórios e fazer links simbólicos para eles.
A estrutura do diretório se parece com:
/storage1
/storage1/123/named_directory_1
/storage1/123456/named_directory_2
/storage1/123456789/named_directory_3
Eu quero mover os diretórios named para os diretórios numerados correspondentes em outro lugar, assim:
/storage2
/storage2/123/named_directory_1
/storage2/123456/named_directory_2
/storage2/123456789/named_directory_3
e, em seguida, crie links simbólicos para esses diretórios nomeados. os diretórios numerados permanecem como diretórios independentes em cada armazenamento, mas os diretórios nomeados devem ser vinculados por símbolos de seus respectivos diretórios numerados em storage1 ao diretório numerado correspondente em storage2.
Eu trabalhei em um comando de busca que combina com o que eu quero: find . -type d -mindepth 2 -maxdepth 2 -regextype grep -regex ".*/[0-9]\{1,10\}/.*"
que combina com todos estes:
/storage2/123/named_directory_1
/storage2/123456/named_directory_2
/storage2/123456789/named_directory_3
mas não sei como fazer todas as manipulações. algo assim, mas você pode ver que não tenho idéia de como obter $number
e $numberandname
... mas tenho experimentado com parâmetros e substituições BASH, mas não consigo acertar.
echo "${named#*/}"
named_directory_1
e este aqui:
echo "${named%/*}"
/storage/123
aqui está o meu melhor esboço de script:
while read -r named; do
export numberandname="${named#/*/*/*/}"
export number="${numberandname%/*}"
mv -- "$named" "/storage2/$number/"
ln -s -- "/storage2/$numberandname "$named"
done < <(find /storage1/ -type d -mindepth 2 -maxdepth 2 -regextype grep -regex ".*/[0-9]\{1,10\}/.*")