好吧,这是我第三次尝试张贴这,也许我问错了问题!
这是一个几年,因为我已经做任何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分隔),并吐出了一个“文件名太长”的错误。
想法?
我想您可以将所有find命令中做到这一点。 OTTOMH:
find -mindepth 3 -maxdepth 3 -type d -name "*New Parts*" -exec ln -s -t /cygdrive/c/Views {} \;
希望我记得语法正确。
您的命令
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空。
使用for循环。
for name in $(find $from_dir -mindepth 3 -maxdepth 3 -type d); do
ln -s $name $to_dir
done
xargs的有问题,其中从管道输入变为在命令结束。 你需要的是多个命令,不只是1个命令。
我与find命令内做事情的经验,有时可能会很慢,但它确实把工作做好。