わたなべです. lndir ってなぜか X と一緒に配布されていて, GNU Win32 の環境 では shell script しかなく, これがすごく遅かったので(いちい ち ln を起動するため) ruby で書きました. 本物とは違い todir は current directory 固定です. CVS と RCS という名前の directory は copy しません. また *~, *.bak, *.orig も copy しません. 例: % tar xfvz ruby-1.1b7.tar.gz % mkdir rbgw11b7 % chdir rbgw11b7 % lndir ../ruby-1.1b7 % ls -l COPYING lrwxrwxrwx 1 watanabe sony 21 Feb 16 11:19 COPYING -> ../ruby-1.1b7/COPYING 実際に cygwin32 版や BOW 版を作るときにはこうしている. configure --srcdir=hoge ができるようにしたほうがいいとも言え るけど, patch とか作るときに便利. -- わたなべひろふみ
#!/usr/local/bin/ruby # Create a symlink tree. # # Syntax: lndir srcdir raise "ruby 1.1b6 required" if VERSION < "1.1b6" srcdir = ARGV[0] unless srcdir puts "usage: #$0 srcdir" exit 1 end IGNORE_DIR = %w(. .. CVS RCS) IGNORE_FILE = /~$|\.(bak|orig)$/ def lndir dir if dir[0] == ?/ newsrcdir = dir else newsrcdir = "../#{dir}" end Dir.foreach dir do |f| if FileTest.directory? "#{dir}/#{f}" next if IGNORE_DIR.include? f puts "#{dir}/#{f}" Dir.mkdir f unless FileTest.directory? f Dir.chdir f lndir "#{newsrcdir}/#{f}" Dir.chdir ".." else next if IGNORE_FILE =~ f File.unlink f if FileTest.exist? f File.symlink "#{dir}/#{f}", f end end end lndir srcdir exit 0