home *** CD-ROM | disk | FTP | other *** search
- #!/opt/local/bin/kermit +
-
- # Creates a new directory for all files in the current directory whose
- # names start with the given prefix, and also makes tar.gz and Zip archives.
- # The files in the original directory are replaced by symlinks to themselves
- # in the new directory. In the process *.hlp files become *hlp.txt and
- # *.doc files become *doc.txt, so they can be viewed in Web browsers.
- #
- # Example:
- #
- # cd ~kermit/a
- # kmovedir mskermit ms
- #
- # moves all the ms* files in the current directory into a new directory,
- # mskermit, naming the zip and tar archives mskermit.zip and mskermit.tar.gz.
- #
- # If the first argument is the name of the current directory, we just
- # make (or re-do) the tar and zip archives.
- #
- # If the second argument is not given, all files from the current directory
- # are done, regardless of their names.
- #
- # If the third argument is given, it is used as the basename for the archive
- # files; otherwise the first argument is used.
- #
- if < \v(argc) 2 {
- echo ?\fword(\%0,-1): Too few arguments
- echo
- echo " Usage: \fword(\%0,-1) newdirectory [fileprefix [archivebasname]]"
- echo " If archivebasename not given the newdirectory name is used."
- echo " If fileprefix not given all files in the current directory are moved."
- echo
- exit 1
- }
- if > \v(argc) 4 {
- echo ?\fword(\%0,-1): Too many arguments
- echo
- echo " Usage: \fword(\%0,-1) newdirectory [fileprefix [archivebasname]]"
- echo " Hint: don't put a wildcard character in the fileprefix."
- echo
- exit 1
- }
- if not def \%3 .\%3 := \%1 # Default archivebasename to newdirectory name
-
- .indestdir = 0 # Current directory == destination?
- .thisdir := \fword(\v(dir),-1,/,ALL)
- if equ "\m(thisdir)" "\%1" .indestdir = 1
-
- # .k := \fword(\v(dir),-2)
- # if not equ "\m(k)" "kermit" {
- # exit 1 "?\fword(\%0,-1): Run this only in a subdirectory of ~kermit"
- # }
-
- # Set the parameters from the command-line arguments
-
- # .dir := \fword(\v(dir),-1)
- # .src := ~kermit/\m(dir)
- .src := \v(dir)
- .dest := ~kermit/\%1
- .pat := \%2*
- .root := kermit
- .base := \%3
-
- show mac root src dest dir pat base indestdir
-
- if indestdir forward makearchives
-
- cd \m(root) # Make new directory if necessary
- if fail exit 1 CD \m(root)
- if not directory \m(dest) {
- !~/bin/mmkdir \m(dest)
- if fail exit 1 "FAILURE TO CREATE \m(dest)"
- }
- cd \m(dest) # CD to it to make sure it's there
- if fail exit 1 "DISAPPEARED: \m(dest)"
-
- cd \m(src) # CD back to source directory
- if fail exit 1
- pwd
-
- .n := \ffiles(\m(pat),&a) # Get the list of files to move
- if not n exit 1 No files match "\m(pat)" in \m(src).
-
- # Move each file, leaving behind a symlink to its new location.
- # A file with a name like xxx.hlp becomes xxxhlp.txt, and similarly for
- # .doc files, thanks to Microsoft's file associations.
-
- for i 1 n 1 {
- if link \&a[i] continue
- xecho \&a[i]...
- if match "\&a[i]" "*.hlp" { # Special treatment for .hlp files
- ren \&a[i] \m(dest)/\freplace(\&a[i],.hlp,hlp.txt)
- if fail exit 1 RENAME [.hlp] failed - \&a[i]
- !ln -s \m(dest)/\freplace(\&a[i],.hlp,hlp.txt) \&a[i]
- if fail exit 1 SYMLINK [.hlp] failed - \&a[i]
- echo OK
- continue
- }
- if match "\&a[i]" "*.doc" { # Also for .doc files
- ren \&a[i] \m(dest)/\freplace(\&a[i],.doc,doc.txt)
- if fail exit 1 RENAME [.doc] failed - \&a[i]
- !ln -s \m(dest)/\freplace(\&a[i],.doc,doc.txt) \&a[i]
- if fail exit 1 SYMLINK [.doc] failed - \&a[i]
- echo OK
- continue
- }
- rename \&a[i] \m(dest)/\&a[i]
- if fail exit 1 RENAME failed - \&a[i]
- !ln -s \m(dest)/\&a[i] \&a[i]
- if fail exit 1 SYMLINK failed - \&a[i]
- echo OK
- }
- cd \m(dest) # CD to the result directory
-
- :makearchives
-
- for i 1 \ffiles(*,&a) 1 { # Fix file permissions and group
- if not def \&a[i] break
- if link \&a[i] continue
- xecho \&a[i]...
- .perms = 644
- if directory \&a[i] .perms = 755
- chmod \m(perms) \&a[i]
- if fail exit
- !chgrp kermit \&a[i]
- if fail exit
- echo OK
- }
-
- !~/bin/kmakezipfile \m(base) # Creat zipfile
- if fail echo WARNING: Zipfile failed
- !~/bin/kmaketarball \m(base) # Create tarball
- if fail echo WARNING: Tarball failed
- exit 0 Done.
-
- ; Local Variables:
- ; comment-column:40
- ; comment-start:"# "
- ; End:
-