home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
kermit.columbia.edu
/
kermit.columbia.edu.tar
/
kermit.columbia.edu
/
archives
/
tools.zip
/
kmovedir
< prev
next >
Wrap
Text File
|
2011-08-17
|
4KB
|
140 lines
#!/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: