143

I want to link ( ln -s ) all files that are in /mnt/usr/lib/ into /usr/lib/

There are lots of files, how can it be done quickly? :)

SuperStormer
  • 4,997
  • 5
  • 25
  • 35

4 Answers4

232
ln -s /mnt/usr/lib/* /usr/lib/

I guess, this belongs to superuser, though.

102

GNU cp has an option to create symlinks instead of copying.

cp -rs /mnt/usr/lib /usr/

Note this is a GNU extension not found in POSIX cp.

caf
  • 233,326
  • 40
  • 323
  • 462
21

The posted solutions will not link any hidden files. To include them, try this:

cd /usr/lib
find /mnt/usr/lib -maxdepth 1 -print "%P\n" | while read file; do ln -s "/mnt/usr/lib/$file" "$file"; done

If you should happen to want to recursively create the directories and only link files (so that if you create a file within a directory, it really is in /usr/lib not /mnt/usr/lib), you could do this:

cd /usr/lib
find /mnt/usr/lib -mindepth 1 -depth -type d -printf "%P\n" | while read dir; do mkdir -p "$dir"; done
find /mnt/usr/lib -type f -printf "%P\n" | while read file; do ln -s "/mnt/usr/lib/$file" "$file"; done
Cascabel
  • 479,068
  • 72
  • 370
  • 318
  • 2
    I believe this should also work as a way to wildcard in hidden files, if you have extended globbing turned on in bash. It matches everything starting with a dot, followed by something other than nothing or another dot (i.e. it excludes `./` and `../`): `ln -s /mnt/usr/lib/.!(|.)* /usr/lib` – Cascabel Aug 28 '09 at 14:07
20
ln -s /mnt/usr/lib/* /usr/lib/
Michael Pfaff
  • 1,178
  • 1
  • 14
  • 24
Michael Krelin - hacker
  • 138,757
  • 24
  • 193
  • 173