如何select性地创build符号链接到LINUX中另一个目录中的特定文件?

我不太确定如何去做这件事,但我需要为一个目录中的某些文件创build符号链接,并将符号链接放在另一个目录中。

例如,我想链接当前目录bar1中没有扩展名“.cc”的名称中所有带有“foo”的文件,并将符号链接放在目录bar2中。

我想知道是否有单行命令可以在LINUX bash中完成这一点。

假设你在一个包含目录bar1bar2目录中:

 find bar1 -name '*foo*' -not -type d -not -name '*.cc' -exec ln -s $PWD/'{}' bar2/ \; 

尝试这个:

 cd bar1 find . -maxdepth 1 -name '*foo*' -not -name '*.cc' -exec echo ln -s $PWD/{} ../bar2 \; 

一旦你对干运行感到满意,从命令中删除echo ,并运行真实。

这是很容易处理与扩展globbing:

 shopt -s extglob cd bar2 ln -s ../bar1/foo!(*.cc) . 

如果你真的想要在一行中,只需使用命令分隔符:

 shopt -s extglob; cd bar2; ln -s ../bar1/foo!(*.cc) . 

这两个例子是相同的,但第一个更容易阅读。

这在技术上不算作一个单一的答案…但它可以粘贴在一个单一的实例,应该做你正在寻找的东西。

 list=`ls | grep foo | grep -v .cc`;for file in $list;do ln $file /bar2/;done