我正在尝试从find命令的结果创建一个符号链接(软链接).我正在使用sed删除文件名前面的./.我这样做,所以我可以将文件名粘贴到保存链接的路径的末尾.我正在使用Ubuntu Server 8.04进行此操作.
我从这篇文章中了解到,这是我问题的解决方案,但并不完全 -
如何有选择地创建LINUX中另一个目录中特定文件的符号链接?
但是,生成的文件名不起作用,所以我开始尝试学习awk,然后决定使用sed.
我正在使用单行循环来完成此任务.问题是循环的结构是分隔文件名,为文件名中的每个单词创建一个链接.有很多文件,我想自动化这个过程,每个链接都采用它所链接的文件的文件名.
我对基本的bash命令很满意,但我还远不是一个命令行专家.我用ls和awk开始这个并且移动找到并且sed.我的sed语法可能会更好,但我已经在两天内学到了这一点,现在我已经陷入困境了.
为了find -type f -name "*txt*" | sed -e 's/.//' -e 's$/$$'; do echo ln -s $t ../folder2/$t;
完成
任何帮助或提示将不胜感激.谢谢.
小智 8
更轻松:
转到要包含文件的文件夹,然后执行以下操作:
find /path/with/files -type f -name "*txt*" -exec ln -s {} . ';'
Run Code Online (Sandbox Code Playgroud)
像这样执行你的 for 循环:
(IFS=$'\n'; for t in `find -type f -name "*txt*" | sed 's|.*/||'`; do ln -s $t ../folder2/$t; done)
Run Code Online (Sandbox Code Playgroud)
通过将 IFS 设置为仅换行符,您应该能够读取整个文件名,而不会在空间上分割。
括号是为了确保循环在子 shell 中执行,并且当前 shell 的 IFS 不会更改。