Using find on subdirectories and create symlinks t

2019-01-27 03:09发布

问题:

Ok, so I've been trying to get my head around this, but I'm struggling.

The premise is this: I have a directory with lots of subdirectories (some of which also contain more subdirectories), and I've got another separate directory on a different share which mimics the source directory in the layout. What I need now is a way of looping through the source directory, discovering the files in the subdirs, and then creating symlinks to them in the destination dir.

In case this isn't that clear, this post describes it fairly well, except that that question is aimed at symlinking dirs, rather than the files themselves.

edit: just noticed what Kerrek was getting at, forgot to include this link: Bash script to automatically create symlinks to subdirectories in a tree

Ok, so so far I have this, based off of Kerrek's answer:

#!/bin/bash

SOURCE="/home/simon/testdir/src"
DEST="/home/simon/testdir/dest"

cd $DEST

find $SOURCE -type f -exec ln -s -- "{}" "{}" \;

exit

which gives the following:

ln: creating symbolic link `/home/simon/testdir/src/new.dir/a': File exists
ln: creating symbolic link `/home/simon/testdir/src/new.dir/b': File exists
ln: creating symbolic link `/home/simon/testdir/src/new.dir/c': File exists

however, it doesn't actually create the symlinks in the destination dir.

回答1:

How about using find?

cd -- "$SOURCEDIR"

find -type d -exec mkdir --parents -- "$DESTDIR"/{} \;

find -type f -exec ln --symbolic -- "$SOURCEDIR"/{} "$DESTDIR"/{} \;


标签: find ln