bash脚本在一棵树上自动创建符号链接到子目录(Bash script to automatical

2019-07-03 16:46发布

好吧,这是我第三次尝试张贴这,也许我问错了问题!

这是一个几年,因为我已经做任何shell编程,所以我有点生疏...

我试图创建一个查找所有子目录一定命名的子目录下的一棵树,并创建符号链接到这些目录(听起来更加混乱比它是)一个简单的shell脚本。 我使用的是Windows XP中的cygwin。

这个发现/ grep命令找到在文件系统中的目录就像我希望它:

find -mindepth 3 -maxdepth 3 -type d | grep "New Parts"

现在最困难的部分......我只想把这个列表,它管到LN并创建一些符号链接。 目录的列表中有一些空白,所以我试图用xargs的清理了一点东西:

find -mindepth 3 -maxdepth 3 -type d | grep "New Parts" | xargs -0 ln -s -t /cygdrive/c/Views

不幸的是,LN吐出来连接在一起的所有目录的长列表(由的\ n分隔),并吐出了一个“文件名太长”的错误。

想法?

Answer 1:

我想您可以将所有find命令中做到这一点。 OTTOMH:

find -mindepth 3 -maxdepth 3 -type d -name "*New Parts*" -exec ln -s -t /cygdrive/c/Views {} \;

希望我记得语法正确。



Answer 2:

您的命令

find -mindepth 3 -maxdepth 3 -type d | grep "New Parts" | xargs -0 ln -s -t /cygdrive/c/Views

有说法“-0”到xargs的,但你没有告诉找到“-print0”(如果你没有的grep无法在管道工程插图中)。 你想要的是我猜的情况如下:

find -mindepth 3 -maxdepth 3 -type d | grep "New Parts" | tr '\012' '\000' | xargs -0 ln -s -t /cygdrive/c/Views

tr命令将换行转换为ascii空。



Answer 3:

使用for循环。

for name in $(find $from_dir -mindepth 3 -maxdepth 3 -type d); do
  ln -s $name $to_dir
done

xargs的有问题,其中从管道输入变为在命令结束。 你需要的是多个命令,不只是1个命令。

我与find命令内做事情的经验,有时可能会很慢,但它确实把工作做好。



文章来源: Bash script to automatically create symlinks to subdirectories in a tree