6

我正在尝试从 find 命令的结果创建一个符号链接(软链接)。我正在使用 sed 删除文件名前面的 ./ 。我这样做是为了将文件名粘贴到将保存链接的路径的末尾。我正在使用 Ubuntu Server 8.04 来解决这个问题。

我从这篇文章中学到了,这是解决我的问题的一种方法,但并不完全-

如何在 LINUX 的另一个目录中选择性地创建指向特定文件的符号链接?

但是,生成的文件名不起作用,所以我开始尝试学习 awk,然后决定使用 sed。

我正在使用单行循环来完成此操作。问题是循环的结构是分隔文件名,为文件名中的每个单词创建一个链接。有很多文件,我想通过每个链接获取它链接到的文件的文件名来自动化这个过程。

我对基本的 bash 命令很熟悉,但我远非命令行专家。我从 ls 和 awk 开始,然后转向 find 和 sed。我的 sed 语法可能会更好,但我在两天内就学会了这一点,现在我有点卡住了。

对于 tfind -type f -name "*txt*" | sed -e 's/.//' -e 's$/$$'; do echo ln -s $t ../folder2/$t;完成

任何帮助或提示将不胜感激。谢谢。

4

2 回答 2

13

更轻松:

转到您要在其中包含文件的文件夹并执行以下操作:

find /path/with/files -type f -name "*txt*" -exec ln -s {} . ';'
于 2013-09-24T21:23:35.477 回答
2

像这样执行你的 for 循环:

(IFS=$'\n'; for t in `find -type f -name "*txt*" | sed 's|.*/||'`; do ln -s $t ../folder2/$t; done)

通过将 IFS 设置为仅换行符,您应该能够读取整个文件名而不会在空格处拆分。

括号是为了确保循环在子 shell 中执行,并且当前 shell 的 IFS 不会改变。

于 2012-11-27T05:29:27.313 回答