gpt4 book ai didi

Linux 符号链接(symbolic link)附加名称

转载 作者:太空宇宙 更新时间:2023-11-04 04:21:39 25 4
gpt4 key购买 nike

有人可以帮助创建一个符号链接(symbolic link),我可以将自己的字符串附加到链接名称中吗?这是我到目前为止的代码:

find /home/folder1/*.txt -type f -exec ln -s {} \;
find /home/folder2/*.txt -type f -exec ln -s {} \;

因此该命令可以创建我的符号链接(symbolic link),但我想将自己的文本附加到链接名称中,因为我可以在每个文件夹中具有相同的文件名,并且在目标中我需要找到一种方法为符号链接(symbolic link)提供唯一的名称。所以我正在考虑创建符号链接(symbolic link),如下所示:

folder1_doc1.txt
folder2_doc1.txt
folder1_doc2.txt
folder2_doc2.txt

我认为脚本看起来像这样:

find /home/folder1/*.txt -type f -exec ln -s {} "folder1_" +\;
find /home/folder1/*.txt -type f -exec ln -s {} "folder2_" + \;

最佳答案

这里存在三个问题。

  1. 匹配文件的名称位于 {} 中。

  2. {} 中的名称是文件的完整路径(在您的情况下为 /home/folder1/a.txt)。您需要删除直到最后一个 / 的所有内容才能获得文件名。一种解决方案是使用 string manipulation并从那里开始为什么我们需要使用 ## 进行最大删除,并使用 */ 来匹配全局:

    $ a="home/files/folder1/s"; echo $a ${a##*/}
    home/files/folder1/s s
  3. 您不能在 ${...} 构造中使用 {}。因此,我会将您的 find ... -exec ... 命令替换为使用 for 的命令,并执行相同的操作:

    for file in `/home/folder1/*.txt`; do ln -s $file folder1_${file##*/}; done

PS:还有basename可以用来代替${a##*/},但它仍然不能在find-exec部分使用。

关于Linux 符号链接(symbolic link)附加名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12533045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com