我正在尝试从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;
完成
任何帮助或提示将不胜感激。感谢。
答案 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不会被更改。