📄 insert-copyright
字号:
#! /usr/bin/perl -w eval 'exec /usr/bin/perl -S $0 ${1+"$@"}' if 0; #$running_under_some_shelluse strict;use File::Find ();use Getopt::Std;my %opts;getopts("n:l", \%opts);my $notice_filename = $opts{n};if(!$notice_filename || $#ARGV < 0) { print "Usage: $0 [-l] -n <copyright-notice> list-of-endings...\n"; print "\n"; print " The copyright-notice should be in a form which has the proper comment\n"; print " structure for the files in question.\n\n"; print " The list-of-endings should be the suffix for each file of the type\n"; print " You wish to change, e.g. .cxx .hxx for files ending in .cxx / .hxx\n\n"; print "Example usage:\n\n"; print "$0 -n ../LICENSE-CXX .c .h .cxx .hxx\n\n"; print " where ../LICENSE-CXX is a file with the LICENSE in C comment style (e.g.\n"; print " what is at the head of most C++ files in the code).\n"; print " This will prepend the text of LICENSE-CXX to each file ending in .c, .h,\n"; print " .cxx, and .hxx in this directory and all subdirectories of this directory.\n"; print " If you do NOT want to descend, then use the -l option.\n"; exit();}# get the copyright noticemy $notice;open(NOTICE, $notice_filename) || die "cannot read $notice_filename: $!";while(<NOTICE>) { $notice .= $_;}close(NOTICE);#$notice = qq{$notice};#print $notice;#exit();# Set the variable $File::Find::dont_use_nlink if you're using AFS,# since AFS cheats.# for the convenience of &wanted calls, including -eval statements:use vars qw/*name *dir *prune/;*name = *File::Find::name;*dir = *File::Find::dir;*prune = *File::Find::prune;if(!$opts{l}) { # Traverse desired filesystems File::Find::find({wanted => \&wanted}, '.');} else { opendir(DIRZ, ".") || die "cannot read files in .: $!"; my @filelist = grep(!/^\.\.?$/ && -f $_, readdir(DIRZ)); closedir(DIRZ); my $file_entry; foreach $file_entry (@filelist) { &add_notice($file_entry); } }exit;sub wanted { my ($dev,$ino,$mode,$nlink,$uid,$gid); (($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) && -f _ && &add_notice($_);}sub add_notice { my ($file) = @_; my $filedata = ""; my $has_copyright = 0; my $ending; my $proper_ending = 0; foreach $ending (@ARGV) { if($file =~ /\Q$ending\E$/) { $proper_ending = 1; } } if($proper_ending) { open(F, $file) || die "cannot read $file: $!"; while(<F>) { $filedata .= $_; $has_copyright = 1 if($_ =~ /copyright.*all\s+rights\s+reserved/i); } close(F); $has_copyright=1 if $filedata =~ /\Q$notice\E/m; if(!$has_copyright) { # rename the file rename $file, "$file.bak" || "cannot move file $file out of the way: $!"; open(F, ">$file") || die "cannot write $file: $!"; print F $notice; print F "\n"; print F $file; close(F); print "changing $file...\n"; } else { print "skipping $file (already has copyright...)\n"; } } else { print "skipping $file (not proper ending...)\n"; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -