从find创建符号链接

时间:2012-11-27 05:13:15

标签: sed find

我正在尝试从find命令的结果创建符号链接(软链接)。我正在使用sed删除文件名前面的./。我这样做,所以我可以将文件名粘贴到保存链接的路径的末尾。我正在使用Ubuntu Server 8.04进行此操作。

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

How do I selectively create symbolic links to specific files in another directory in LINUX?

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

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

我对基本的bash命令感到满意,但我远不是一个命令行专家。我用ls和awk开始这个并且移动找到并且sed。我的sed语法可能会更好,但我已经在两天内学到了这一点,现在我有点卡住了。

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

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

2 个答案:

答案 0 :(得分:7)

更容易:

转到要包含文件的文件夹并执行:

find /path/with/files -type f -name "*txt*" -exec ln -s {} . ';'

答案 1 :(得分: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不会被更改。