【问题标题】:How do I symlink all files from one directory to another in bash? [closed]如何在 bash 中将所有文件从一个目录符号链接到另一个目录? [关闭]
【发布时间】:2009-08-28 13:49:34
【问题描述】:

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

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

【问题讨论】:

  • 有多少个文件是“很多”,你认为“快”多快?
  • 这是 50:50 是否适合“serverfault”或“superuser”,但它不是编程,因此不适用于 stackoverflow。

标签: bash symlink ln


【解决方案1】:
ln -s /mnt/usr/lib/* /usr/lib/

我猜,不过这属于超级用户。

【讨论】:

  • 这不包括隐藏文件,它链接整个目录。如果其中任何一个都不是您想要的,请参阅我的回答。否则,这是最短的方法。
  • 你是对的。但是库通常不会隐藏。在任何情况下都涉及点文件,您的解决方案会更方便。
  • 它会永久指向另一个文件夹吗?
  • @YuPPie 我猜,它只是为目录中的每个文件创建硬链接。 (这就是我今天想要的,所以 +1 :D)
  • @SargeBorsch 它创建符号链接(硬链接不同)。
【解决方案2】:

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

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

请注意,这是一个未找到的 GNU 扩展 in POSIX cp

【讨论】:

  • 你的当前目录应该是 /usr/ 以这种方式进行符号链接
  • @caf 如果目标是现有文件夹,则在 /usr/ 文件夹中创建 lib 文件夹
  • 好答案。也可用于使用 -l 而不是 -s 创建硬链接。
  • 还有复制隐藏文件的选项吗?
  • @sinekonata 确定你可以使用cp -rs /myconfigfolder/. /mynewconfigfolder/ 所以所有内容都应该包含隐藏文件符号链接
【解决方案3】:
ln -s /mnt/usr/lib/* /usr/lib/

【讨论】:

    【解决方案4】:

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

    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
    

    【讨论】:

    • 如果您在 bash 中打开了扩展通配符,我相信这也应该作为在隐藏文件中使用通配符的一种方式。它匹配以点开头的所有内容,然后是其他内容或其他点(即不包括 ./../):ln -s /mnt/usr/lib/.!(|.)* /usr/lib
    猜你喜欢
    • 2020-12-08
    • 1970-01-01
    • 2023-03-14
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    相关资源
    最近更新 更多