gpt4 book ai didi

linux - 我可以使用 find 命令根据文件名在子目录中创建链接吗?

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

(这里是 Linux 新手)

我有一个包含主文件“cs010101.SETUP”和许多子目录的目录。每个子目录包含大量文件,包括一些格式为cs??????.dat3 的文件。我正在寻找一种方法来找到所有的 cs??????.dat3 文件,然后在其相应目录中为每个文件创建一个软链接(soft link),返回主文件 (cs010101.SETUP),其中包含六位数字更改为匹配相应的 cs??????.dat3 文件。

例如如果子目录包含文件cs219254.dat3,我想执行命令

ln -s ../cs010101.SETUP cs219254.SETUP

到目前为止,我已经了解了 find 命令

find . -name "cs*dat3"

并查看要切割的管道以提取数字

find . -name "cs*dat3" | cut -c 13-18

(这目前有效,因为子目录的命名约定是一致的,但如果不必依赖该事实会很好)。

但是现在我难住了!

最佳答案

只是一个想法...... CSH(又名 TCSH)提供了各种变量的“:”选项 - 例如:

% set a = ./b/bb/cs219255.dat3

% echo $a:h
./b/bb

% echo $a:t
cs219255.dat3

% echo $a:r
./b/bb/cs219255

% echo $a:e
dat3

你想要绝对路径还是相对路径?

foreach T ( `find . -name 'cs*dat3' -print` )
foreach? ln -s `pwd`/cs010101.SETUP $T:r.SETUP-absolutepath
foreach? ln -s `echo $T:h | sed 's|/[^/]*|/..|g'`/cs010101.SETUP $T:r.SETUP-relativepath
foreach? end

警告:我们应该在 sed 表达式中使用 + 而不是 *,例如sed 's|/[^/]+|/..|g'。但是我是在一个非常有限的系统上用一个损坏的 sed 版本测试这个的。 感叹

关于linux - 我可以使用 find 命令根据文件名在子目录中创建链接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12661024/

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