LINUX:将所有文件从一个链接到另一个目录


123

我想链接(ln -s)所有/mnt/usr/lib/进入的文件/usr/lib/

文件很多,如何快速完成?:)


“批次”有多少个文件,您认为“快速”有多快?
埃里克·史密斯

4
无论适合“ serverfault”还是“ superuser”,这都是50:50,但它不是在编程,因此不适用于stackoverflow。
马克·格雷韦尔

Answers:


202
ln -s /mnt/usr/lib/* /usr/lib/

我猜,这属于超级用户。


6
这不包括隐藏文件,它链接整个目录。如果这些都不是您想要的,请参阅我的答案。否则,这是最短的方法。
卡斯卡贝尔

你是对的。但是库通常不是隐藏的。无论如何涉及点文件,您的解决方案都变得更加方便。

1
它会永久指向另一个文件夹吗?
nmkyuppie

@YuPPie我猜,它只是创建到目录中每个文件的硬链接。(这是我今天想要的,所以+1:D)
显示名称

2
@SargeBorsch它创建符号链接(硬链接是不同的)。
jsejcksn

90

GNU cp可以选择创建符号链接而不是复制。

cp -rs /mnt/usr/lib /usr/

注意,这是在POSIX中cp找不到的GNU扩展。


4
您的当前目录应该是/ usr /,以这种方式进行符号链接
Soul_man

@caf如果目标位置是现有文件夹,则将在/ usr /文件夹中创建lib文件夹
Tamil Selvan C

2
好答案。也可以用于用-l而不是-s创建硬链接。
传真


15

发布的解决方案将不会链接任何隐藏文件。要包括它们,请尝试以下操作:

cd /usr/lib
find /mnt/usr/lib -maxdepth 1 -print "%P\n" | while read file; do ln -s "/mnt/usr/lib/$file" "$file"; done

如果您碰巧想递归地创建目录并且仅链接文件(因此,如果您在目录中创建文件,则实际上/usr/lib不是/mnt/usr/lib),则可以执行以下操作:

cd /usr/lib
find /mnt/usr/lib -mindepth 1 -depth -type d -printf "%P\n" | while read dir; do mkdir -p "$dir"; done
find /mnt/usr/lib -type f -printf "%P\n" | while read file; do ln -s "/mnt/usr/lib/$file" "$file"; done

2
我相信,如果您已在bash中启用了扩展的glob,则这也应该用作隐藏文件中通配符的一种方式。它匹配以点开头的所有内容,然后是./../ln -s /mnt/usr/lib/.!(|.)* /usr/lib
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.