Using find on subdirectories and create symlinks to all files

社会主义新天地 提交于 2019-12-18 07:09:19

问题


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"/{} \;


来源:https://stackoverflow.com/questions/9795538/using-find-on-subdirectories-and-create-symlinks-to-all-files

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!