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

时间:2012-06-04 20:45:05

标签: linux bash symlink

我不确定如何执行此操作,但我需要为一个目录中的某些文件创建符号链接,并将符号链接放在另一个目录中。

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

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

4 个答案:

答案 0 :(得分:3)

假设您所在的目录包含目录bar1bar2

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

答案 1 :(得分:2)

试试这个:

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

一旦您对干运行感到满意,请从命令中删除echo并运行它。

答案 2 :(得分:1)

使用扩展的globbing很容易处理:

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

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

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

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

答案 3 :(得分:0)

从技术上讲,这不算作单行答案......但它可以粘贴在一个实例中,并且应该按照您的要求进行操作。

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