我有一个包含文件的目录。我想定期运行一个脚本,查找该目录中只有一个链接的所有文件,并将它们硬链接到另一个目录中。但是,我希望第二个目录中的目录结构与第一个目录相匹配。
查找 /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
在目标目录中创建目录结构。