Symlink directory tree to one directory

133 Views Asked by At

I would like to have a bash script to loop through a directory tree and make symlinks to a new directory whit no tree but changing the name of the file to a new one which tells directory.

Something like this:

Origin:

Directory

-- DirectoryA

---- DirectoryAA

------ FileAA1

------ FileAA2

----FileA1

----FileA2

-- DirectoryB

----FileB1

-- DirectoryC

----FileC1

----FileC2

----FileC3

Destination:

DirectoryDest

--DirectoryA - DirectoryAA - FileAA1

--DirectoryA - DirectoryAA - FileAA2

--DirectoryA - FileA1

--DirectoryA - FileA2

--DirectoryB - FileB1

--DirectoryC - FileC1

--DirectoryC - FileC2

--DirectoryC - FileC3

1

There are 1 best solutions below

3
On

This should do it:

cd Directory; find * -type f -print0 | xargs -l -0 bash -c 'filename=`echo "$0" | tr '/' -`; ln -s $(pwd)/$0 ../DirectoryDest/$filename'

This will result in these files:

user@machine:~$ ls -l DirectoryDest/
total 0
lrwxrwxrwx 1 user user 51 Jul 27 23:02 DirectoryA-DirectoryAA-FileAA1 -> /home/user/Directory/DirectoryA/DirectoryAA/FileAA1
lrwxrwxrwx 1 user user 51 Jul 27 23:02 DirectoryA-DirectoryAA-FileAA2 -> /home/user/Directory/DirectoryA/DirectoryAA/FileAA2
lrwxrwxrwx 1 user user 38 Jul 27 23:02 DirectoryA-FileA1 -> /home/user/Directory/DirectoryA/FileA1
lrwxrwxrwx 1 user user 38 Jul 27 23:02 DirectoryA-FileA2 -> /home/user/Directory/DirectoryA/FileA2
lrwxrwxrwx 1 user user 38 Jul 27 23:02 DirectoryB-FileB1 -> /home/user/Directory/DirectoryB/FileB1
lrwxrwxrwx 1 user user 38 Jul 27 23:02 DirectoryC-FileC1 -> /home/user/Directory/DirectoryC/FileC1
lrwxrwxrwx 1 user user 38 Jul 27 23:02 DirectoryC-FileC2 -> /home/user/Directory/DirectoryC/FileC2
lrwxrwxrwx 1 user user 38 Jul 27 23:02 DirectoryC-FileC3 -> /home/user/Directory/DirectoryC/FileC3