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

119 linux ln

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

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

小智 195

ln -s /mnt/usr/lib/* /usr/lib/
Run Code Online (Sandbox Code Playgroud)

我想,这属于超级用户.

  • 这不包括隐藏文件,它链接整个目录.如果其中任何一个不是您想要的,请参阅我的回答.否则,这是最短的路. (5认同)
  • @SargeBorsch它创建符号链接(硬链接是不同的)。 (2认同)
  • 这对我不起作用。我只是将 * 作为软链接而不是 lib 内的所有文件和文件夹 (2认同)

caf*_*caf 84

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

cp -rs /mnt/usr/lib /usr/
Run Code Online (Sandbox Code Playgroud)

请注意,这是POSIX中cp找不到的GNU扩展.

  • 您当前的目录应该是/ usr /以这种方式进行符号链接 (4认同)
  • 好答案。也可用于使用 -l 而不是 -s 创建硬链接。 (2认同)

Mic*_*ker 15

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


Cas*_*bel 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
Run Code Online (Sandbox Code Playgroud)

如果你碰巧想要递归地创建目录而只想链接文件(这样如果你在一个目录中创建一个文件,它确实/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
Run Code Online (Sandbox Code Playgroud)

  • 我相信,如果您已在bash中启用了扩展的glob,则这也应该可以用作隐藏文件中通配符的一种方式。它匹配所有以点开头的内容,然后是空或其他点(例如,不包括`。/`和`../`):ln -s / mnt / usr / lib /。!(|。) * / usr / lib` (2认同)