从所有子文件夹到Linux中的所有子文件夹进行硬链接?

时间:2014-03-25 20:24:10

标签: bash tree cp

我有两个文件夹,我们称它们为A和B.两个文件夹下面都有一个文件夹结构,这是相同的。说A有文件夹1,2,3,4和5.B有文件夹1,2,3,4和5.A的所有子文件夹中都有各种文件(例如/A/1/file.txt / A /2/anotherfile.txt)。同样适用于子文件夹的子文件夹,因此树很深。

现在,我可以在所有B:s文件夹和子文件夹中创建硬链接吗?这样两个树结构看起来都一样,所有文件夹和子文件夹都包含相同的文件。那么,硬链接就是。

cp -l A到B的所有文件

2 个答案:

答案 0 :(得分:2)

bash 4中,您可以编写一个简单的循环,如

cd A
shopt -s globstar
for d in **/; do
    mkdir -p "B/$d"
    for f in "$d"; do
        [[ -f $f ]] && cp -l "$f" "B/$f"
    done
done

答案 1 :(得分:1)

使用rsync

可以轻松完成此操作
$ rsync -a --link-dest=../A A/ B

示例:

# Optionally, get rid of your destination
$ rm -rf B

$ find
.
./A
./A/2
./A/2/foo
./A/1
./A/1/foo

# If the argument to --link-dest is relative, it is relative
# to the target directory which is B in this case, hence the ../A
$ rsync -a --link-dest=../A A/ B

$ find
.
./B
./B/2
./B/2/foo
./B/1
./B/1/foo
./A
./A/2
./A/2/foo
./A/1
./A/1/foo

# Notice the identical inodes
$ ls -1i {A,B}/{1,2}/foo
349408 A/1/foo
349409 A/2/foo
349408 B/1/foo
349409 B/2/foo