LINUX:如何软链接所有子目录中的特定文件

时间:2017-10-26 09:39:56

标签: linux bash shell command-line

我想在其名称中包含ln -s的所有文件中创建软链接(folder2)到*foo*,并且可以在{{的部分或全部子目录中找到1}}。

我已经使用folder1forfind以及它们的组合进行了尝试,但我得到的是一个名为find -exec ln的断开链接或指向*foo*

内所有内容的链接

4 个答案:

答案 0 :(得分:2)

一举 globstar

shopt -s globstar
cd folder2
ln -s ../folder1/**/*foo* .
相对链接需要

cd(这适用于以下使用查找的答案)。如果您想要绝对链接,请执行

shopt -s globstar
ln -s /where/is/it/folder1/**/*foo* folder2/

答案 1 :(得分:0)

如果您在目标文件夹中想要创建符号链接,请使用ln -s <target file>。 sym链接名称将与目标文件相同。

如果您需要为多个文件执行此操作,请使用for循环。

示例:

$ mkdir folder1 folder2
$ cd folder1
$ touch foo foobar foofoobar foobarfoo bar barfoo barbar
$ ls
bar  barbar  barfoo  foo  foobar  foobarfoo  foofoobar
$ cd ../folder2
$ for i in ../folder1/*foo*; do ln -s $i; done
$ ls -l
total 0
lrwxrwxrwx 1 abc abc 17 oct.  26 11:57 barfoo -> ../folder1/barfoo
lrwxrwxrwx 1 abc abc 14 oct.  26 11:57 foo -> ../folder1/foo
lrwxrwxrwx 1 abc abc 17 oct.  26 11:57 foobar -> ../folder1/foobar
lrwxrwxrwx 1 abc abc 20 oct.  26 11:57 foobarfoo -> ../folder1/foobarfoo
lrwxrwxrwx 1 abc abc 20 oct.  26 11:57 foofoobar -> ../folder1/foofoobar

答案 2 :(得分:0)

试试这个,

for fileName in `find folder1 -name *foo*`
do
   name1=`basename $fileName`
   ln -sf $fileName folder/$name1
done

答案 3 :(得分:0)

检查

for file in `find . -name *foo* -print`
do
    ln -s $file folder2/
done