Bash script to automatically create symlinks to subdirectories in a tree

后端 未结 3 1778
借酒劲吻你
借酒劲吻你 2021-01-14 14:54

Ok, this is my third try posting this, maybe I\'m asking the wrong question!!

It\'s been a few years since I\'ve done any shell programming so I\'m a bit rusty...

相关标签:
3条回答
  • 2021-01-14 15:27

    your command

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

    have argument "-0" to xargs but you did not tell find to "-print0" (if you did grep could not work in the pipe inbetween). What you want is the following I guess:

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

    The tr command will convert newlines to ascii null.

    0 讨论(0)
  • 2021-01-14 15:43

    Use a for loop.

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

    Xargs has issues where the input from the pipe goes at the end of the command. What you want is multiple commands, not just 1 command.

    My experience with doing things within the find command can sometimes be slow, although it does get the job done.

    0 讨论(0)
  • 2021-01-14 15:45

    I think you can do this all within your find command. OTTOMH:

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

    Hope I remembered that syntax right.

    0 讨论(0)
提交回复
热议问题