将目录结构硬链接到其他地方

将目录结构硬链接到其他地方

我有一个包含文件的目录。我想定期运行一个脚本,查找该目录中只有一个链接的所有文件,并将它们硬链接到另一个目录中。但是,我希望第二个目录中的目录结构与第一个目录相匹配。

查找 /srcdir/ -links 1 -exec ln {} /dstdir/ \;

确实硬链接所有文件,但没有创建我需要的目录。

如果目录仅包含已有多个链接的文件,则无需在目标中创建该目录。

答案1

由于硬链接相当便宜,您可以像下面这样制作它们:(这将使所有文件都成为硬链接,并创建与源中相同的目录)

cp -al source dest

然后,您可以删除文件系统上其他位置的硬链接。(如果双硬链接是一个问题)使用您发布的稍微修改过的 find 命令。

答案2

如果我正确理解了你的问题,并且你有一个目录(sourcedir)并且其中包含各种子目录,并且链接的文件可以位于/sourcedir/或位于/sourcedir/foo/sourcedir/bar等等,那么这应该可以满足你的需要:

find /sourcedir/ -links 1  | sed 's/.sourcedir.//' | while read n; do \
  mkdir -p /destdir/`dirname "$n"`; ln /sourcedir/"$n" /destdir/"$n"; \
done

它用于dirname获取每个文件的子目录并mkdir -p在目标目录中创建目录结构。

相关内容