SYNOPSIS
mkls-lR -d dirpath [-a] [-n basename] [-t tod] [-h] [--help] [-V] [--version] [ ] [-Ipath ...] [path ...] [ ]
DESCRIPTION
mkls-lR creates or updates the four files timezone, ls-lR.gz, ls-lR.patch.gz amd ls-lR.times in the directory dirpath. With the -a option a fifth file ls-lR is included. More than the disk space of ls-lR is briefly used in /tmp.The command ls -lR >ls-lR stores a long recursive directory listing in the file ls-lR. FTP servers make these files once a day so a directory listing is ready to download whenever a mirror logs in. For gigabyte servers these files are several megabytes and are usually compressed to ls-lR.gz. Many mirrors still download ls-lR.gz daily, compare it with their own directory and then request the new files they want.
Many large archives now have ls-lR.gz about a megabyte and the average total size of the daily new files is similar. The bandwidth and (horror) charges for downloading the new files are increased by the size of the daily ls-lR.gz.
ls-lR.patch.gz is a compressed unified difference of the previous and the current ls-lR file. Mirror scripts and programs can download this file and patch a local copy of the remote server's ls-lR daily. ls-lR.patch.gz is sometimes only 1% of the size of ls-lR.gz.
ls-lR.times contains just the modification times of the previous and current ls-lR expressed as decimal seconds since the beginning of 1st January 1970 in the server's time zone. A mirror can download this 20 byte file first to check whether its local copy of the server's ls-lR can be patched with the ls-lR.patch.gz currently available or whether it needs to download a fresh ls-lR.gz.
mkls-lR makes the above files with careful attention to preserving and recording names and times. Mirrors can check the names and times against their local copy of the server's ls-lR before applying ls-lR.patch.gz as well as checking whether the patch fits. This ensures the mirror's ls-lR is aligned with the server's. mkls-lR does not make new ls-lR files unless there is a difference in the directories further saving in unnecessary mirror downloads.
Heavy server load increases ls runtime delaying ls-lR files until mirrors miss downloading them. mkls-lR can store new ls-lR files in /tmp for up to an hour before release at a precise time of day tod set with the -t option. The time mkls-lR starts should under normal load allow making of the final file ls-lR.times in the middle of the interval before tod. This prevents mirrors missing ls-lR files when server load is heavy even if mirroring starts only 1 minute after tod. A mirror using the timezone file with tod can set its start time precisely when appropriate.
mkls-lR makes and places the files as follows. If the file /etc/timezone is readable mkls-lR copies it to timezone in dirpath. It then makes ls-lR and ls-lR.patch.gz in the /tmp directory but relative to dirpath. If ls-lR is made before time of day tod its modification time is set to tod. After compressing ls-lR to ls-lR.gz, mkls-lR sets the modification time of ls-lR.gz equal to ls-lR. By default mkls-lR then deletes ls-lR but for the -a option it moves ls-lR to dirpath instead. mkls-lR makes ls-lR.times last. If tod has passed or at is unavailable, mkls-lR moves ls-lR.times, ls-lR.patch.gz and ls-lR.gz into dirpath immediately but otherwise asks at to move them at tod precisely.
mkls-lR is a bash script using GNU utilities intended for use on FTP servers with archives over 100 MB in size.
EXAMPLES
mkls-lR would normally be started by cron shortly before it is desired mirrors should log in. For these examples to work cron must have write permission to the dirpath subdirectory path argument. If you have more than one of these commands you should put them in a shell script and start the script with cron.
- 50 20 * * * /usr/bin/mkls-lR -d /home/ftp/pub -t 21:00
-
At 8:50 pm local time start making the
ls-lR
files in
/tmp.
Move them to
/home/ftp/pub
where mirrors can download them at 9:00 pm precisely.
- mkls-lR -d /home/ftp/pub -Ils-lR.*
-
Make the
ls-lR
files in
/home/ftp/pub
and do not include them in the listing. This stops any badly
configured mirrors from downloading the
ls-lR
files twice.
- mkls-lR -d /home/ftp/tex-archive -Ils-lR.* -IFILES.by*
-
Include in the listing neither
ls-lR
files nor
FILES.bydate
nor
FILES.byname
nor
FILES.bysize.
A common fault of CTAN mirrors is downloading daily the 12 MB of index
files mentioned. A mirror using these
ls-lR
files cannot make that mistake.
- mkls-lR -d /home/ftp/pub/debian -n ls-lR_stable\ dists/slink/*
-
The
basename,
ls-lR_stable,
replaces
ls-lR
so the output filenames become
ls-lR_stable.gz,
ls-lR_stable.patch.gz
and
ls-lR_stable.times.
Only subdirectories matching
dists/slink/*
and their contents are listed so a mirror using the above files will
only download these. This example may be obsolete when you read this
manpage.
OPTIONS
- -a
-
Move
ls-lR
to directory
dirpath
immediately after compression.
Default: Delete after compression.
- -d dirpath
-
Copy any
/etc/timezone
into directory
dirpath.
Make the files
ls-lR.gz,
ls-lR.patch.gz
and
ls-lR.times
relative to directory
dirpath.
Move them into
dirpath.
Write permission to
dirpath
is necessary.
- -n basename
-
Substitute
basename
for
ls-lR
in each of the output file names
ls-lR
occurs in.
Default:
ls-lR.
- -t tod
-
Move
ls-lR.times,
ls-lR.patch.gz,
and
ls-lR.gz
from
/tmp
to
dirpath
at a time of day
tod
not more than 1 hour after
mkls-lR
starts. The modification times of
ls-lR
and
ls-lR.gz
are set to
tod.
If
-a
requires
ls-lR,
it moves when created.
tod
must be a single word
date
understands. Usually
tod
is in the format
hh:mm,
for example
21:00.
An example for testing is
now+1min.
To release files at 5 minutes past midnight tomorrow use
23:65.
Default:
now.
- -h, --help
-
Display help message then exit.
-
expand special pattern characters
*,
?,
[
and
]
in
path
relative to directory
dirpath.
Default: Expand relative to current default directory.
- -Ipath
-
path
is a shell pattern of files or directories not to appear in
ls-lR,
ls-lR.gz
or
ls-lR.patch.gz.
- path
-
path
is a shell pattern of files or directories to appear in
ls-lR,
ls-lR.gz
or
ls-lR.patch.gz.
Default: All files in and below
dirpath.
- -V, --version
-
Display version and copyright message then exit.
AUTHOR
Ian Maclaine-cross 31st August 1999