【问题标题】:Using find on subdirectories and create symlinks to all files在子目录上使用 find 并为所有文件创建符号链接
【发布时间】:2012-03-20 21:49:38
【问题描述】:

好的,所以我一直在努力解决这个问题,但我很挣扎。

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

如果这不是很清楚,这篇文章描述得相当好,除了这个问题是针对 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

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

【问题讨论】:

  • 您是否只是引用了您自己的同一帖子,声称它很好地描述了您的帖子点?
  • @KerrekSB 是的,但我不确定如何调整它以适应我的情况。我以前从未真正使用过符号链接。
  • 如果您已经在目标目录中,您需要说ln -s {} ./{} \;。或者只是按照我在答案中写的去做。
  • 看,我试过了,现在我得到:ln:创建符号链接`.//home/simon/testdir/src/new.dir/c':没有这样的文件或目录编辑:我想知道 ln 命令是否正在接收源目录的整个路径,然后尝试将其应用于它在目标目录中创建的符号链接?
  • ln -sf替换现有文件,但您需要先正确设置脚本。

标签: find ln


【解决方案1】:

find怎么样?

cd -- "$SOURCEDIR"

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

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

【讨论】:

  • 根据这个答案更新了我的原始帖子。
猜你喜欢
  • 1970-01-01
  • 2012-11-14
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2020-01-07
  • 2015-07-31
相关资源
最近更新 更多