3

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

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

我想知道是否有单行命令可以在 LINUX bash 中完成此操作。

4

4 回答 4

3

假设您位于包含目录bar1和的目录中bar2

find bar1 -name '*foo*' -not -type d -not -name '*.cc' -exec ln -s $PWD/'{}' bar2/ \;
于 2012-06-04T21:01:49.783 回答
2

试试这个:

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

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

于 2012-06-04T21:04:09.030 回答
1

这可以通过扩展通配符轻松处理:

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

如果您真的希望将所有内容集中在一行上,只需使用命令分隔符:

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

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

于 2012-06-04T21:06:41.610 回答
0

从技术上讲,这不算作单行答案……但它可以粘贴在一个实例中,并且应该可以满足您的需求。

list=`ls | grep foo | grep -v .cc`;for file in $list;do ln $file /bar2/;done
于 2012-06-04T21:00:23.587 回答