2012-03-20 72 views
2

好的,所以我一直试图让我的头,但我挣扎。使用查找子目录并创建符号链接到所有文件

前提是:我有一个包含大量子目录(其中一些还包含更多子目录)的目录,并且我在另一个不同的共享上有另一个单独的目录,它模仿布局中的源目录。我现在需要的是循环访问源目录,发现子目录中的文件,然后在目标目录中为它们创建符号链接的方法。

如果这不是很清楚,这篇文章描述得相当好,除了这个问题是针对符号化dirs而不是文件本身。

编辑:刚才注意到什么Kerrek渐渐的,忘了,包括这个链接:Bash script to automatically create symlinks to subdirectories in a tree

好了,到目前为止,我有这个,根据关Kerrek的回答:

#!/bin/bash 

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

cd $DEST 

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

exit 

这给如下:

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 

但是,它实际上并没有在目标目录中创建符号链接。

+0

您是否仅仅引用了您自己的非常相同的帖子,声称它描述您的帖子非常好? – 2012-03-20 21:53:23

+0

@KerrekSB是的,但我不确定如何适应它在我的情况下使用。我从来没有真正使用过符号链接。 – analbeard 2012-03-20 21:55:27

+0

如果您已经在目标目录中,您需要说'ln -s {} ./ {} \;'。或者只是做我在答案中写的。 – 2012-03-20 22:27:41

回答

5

如何使用find

cd -- "$SOURCEDIR" 

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

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

根据这个答案更新了我迄今为止的原始文章。 – analbeard 2012-03-20 22:24:48

相关问题