Bash 递归地将文件从一个文件夹链接到另一个文件夹
我的结构如下:Bash 递归地将文件从一个文件夹链接到另一个文件夹,bash,shell,unix,Bash,Shell,Unix,我的结构如下: /foo /foo/pages /foo/pages/page1 file100.txt file101.txt /foo/pages/page1/item1 file199.txt /foo/pages/page2 filefoo202.txt bar3.txt /foo/pages/page3 /foo/bar 我想获取/foo/pag
/foo
/foo/pages
/foo/pages/page1
file100.txt
file101.txt
/foo/pages/page1/item1
file199.txt
/foo/pages/page2
filefoo202.txt
bar3.txt
/foo/pages/page3
/foo/bar
我想获取/foo/pages
中以.txt
结尾的每个文件,并在/foo/bar
中创建一个符号链接。该命令将从/foo
执行
/foo/bar
的最终结果是:
/foo/bar
file100.txt
file101.txt
file199.txt
filefoo202.txt
bar3.txt
注意:我使用的是Linux/Bash
cd bar # maybe 'mkdir bar' before
for i in ../pages/*.txt
do
ln -s "$i"
done
相对符号链接是创建文件的起点
否则绝对符号链接:
find foo -type f -exec ln -s "$PWD"/{} foo/bar/ \;
修正了斜杠。我正在努力用find、extract the name等来实现它,但我想知道这是否是一种简单的实现方法。它不提供递归,也不在/foo/barI中创建链接。我不明白为什么不应该这样做。指定从
/foo/
开始。开始时,我将cd
插入bar
。然后我创建指向每个。/pages/*.txt
的符号链接。它们是在我所在的位置用目标的basename创建的。不过,我看不出您期望的是什么“递归”。啊,我现在看到您还有深度嵌套的结构。我的解决方案只解决第一层的问题。你自己的答案能正确地将树向下移动。你不需要那种sed
的东西。一个简单的ln-s“$i”
就足够了。但是你需要在$i
周围加引号,以防任何文件中有空格。请注意,如果没有sed内容和双引号,阅读起来就容易多了,以确保空格不是问题。谢天谢地,没有充分理由的引用有几个缺点。首先,可能有一个包含空格的文件。也许只是偶然,也许在以后的情况下。其次,其他审查您代码的开发人员可能会对您为什么省略它们感到困惑,因为省略它们意味着您需要对变量内容进行另一个计算步骤。第三,您可能会养成忽略它们的习惯,而忽略它们在大多数情况下是没有好处的,而且在许多情况下是一个普通的bug。不要忘记,这里给出的答案不应该仅仅解决您的特殊情况。
find foo -type f -exec ln -s ../../{} foo/bar/ \;
find foo -type f -exec ln -s "$PWD"/{} foo/bar/ \;