UNIX utilities just scan the directory sequentially and so you get an unsorted list:
du, find etc.
UnixDos will always sort the top level and each sub level in descending operations so you always will get a sorted list (unless you want to switch it off with "set UDNOSORT=ON")
UnixDos provides the full UNIX argument expansion functionality but adds even more power thru the following features:
full file match inversion: ls !*.zip
partial file match inversion: ls ![a-m]*!*.zip
file contents retrieve: ls @file.lst
file text exchange: cut -c5-10 ~ThisIsText displays: IsText
multiple commands: uecho `ls } x1.tmp;wc -lt { x1.tmp` files
automatic environment: set UDLS=-le; ls x*
two level expansion: scat '*.c` > c.lst; ls @c.lst
If you call "cd" without any argument under UNIX it will go automatically to the "homedirectory".
In DOS there is no reliable equivalent so instead the UnixDos "cd" will show you the current drive and directory.
"cp" and "mv" will not check if the last argument on the command line is a directory and it will silently create a new file and leave you under the wrong impression that all the specified files have been moved. Here is an example:
You want to move all C source to the "\tmp" directory, but you make a typo and forget the slash in front of tmp:
mv *.c tmp (instead of: mv *.c /tmp)
Instead of finding all your C sources in the "/tmp" directory, you will only find the last C source in the file "tmp" in the current directory and all the other C sources are lost!
"cp" and "mv" in UnixDos will first check if the last argument is a directory (when more than 2 files are specified) and give you an error message if this is not the case.
"cp", "mv" and "rm" have no option which will show you the currently processed files, so that you can see the progress (as "cpio" is doing it so nicely) and even the new destination. UnixDos allows you to see each file as it is processed (-l option).
"cp" and "mv" have no verify option which actually re-reads the new copy and compares it against the original.
UnixDos provides the verify feature (-v option) to compare the copy against the original. This applies only in those cases to the "mv" utility when you move files between drives(file systems).
The UNIX "cut" ignores the sequence in which you specify the selected fields:
cut -f3,1 is identical under UNIX to:
cut -f1,3
UnixDos will not ignore the specified field sequence and will allow you to rearrange the field sequence.
The UNIX "cut" does not allow character extraction counting from the end of the line(s):
cut -C5-10 ~ThisIsText
Will produce:
ThisIs
UNIX "cmp" does not show you the filenames or any hexadecimal/text values (only octal).
UnixDos lists the filenames first, so you can easily see which values go with which file, and also shows the result in hex and text form.
UNIX "df" displays the free space by default in number of blocks(which varies in size) instead of bytes like UnixDos. The MKS and other DF ports also show the wrong result for big SCSI drives or Network drives (see "df")
UNIX "diff" shows the comparison result as a command
sequence for the "ed" editor - it is NOT meant for regular humans to read this
kind of cryptic output. Also you cannot see the filename only the ">" or
"<" character to easily see which text goes with which input file. UnixDos will show the differences in an easily readable form and also allows you to
view the context surrounding the differences.
This is a very slow shell script and is not flexible to compare by time/size/contents.
UnixDos provides a high-speed tool to compare entire directories using the time, size or contents (cmpdir)
UNIX "du" displays the used space in blocks (which varies in size) which is very user-unfriendly and does not allow you to see the actual bytes without the empty padding space. Also it displays the result in an arbitrary unsorted sequence, while UnixDos DU always displays the result in sorted sequence.
UnixDos will show the result in alphabetical order in megabytes and allows you to discard the padded empty space (so that you can correctly compare when you copy directory trees to a new media with a different block size!). Also you can get a sorted list of files in different directories or number of files in directories.
UNIX/MKS does not allow you to enable or disable the automatic escape character logic and automatic space insertion between arguments. This might be essential if you work with the problematic backslash in DOS path names - or if you have to join arguments without a separating space in between.
UNIX "find" displays the searched files in an arbitrary unsorted sequence, while UnixDos UFIND always displays the result in sorted sequence.
UNIX "find" does not have the capability to also search for files which are older, while UnixDos UFIND makes this option available and therefore allowing you to search for an actual time window. It also allows to search for after/before or equal with the -NEWER and -OLDER option.
"egrep","fgrep" and "grep" cannot handle lines longer than 1024 bytes which can easily be too short when you work with larger database dumps. Also the UNIX "grep" does not provide a descending option so that you can also easily scan all subdirectories.
UnixDos can handle lines up to 10,000 bytes and allows you to descend into all the subdirectories with the "-d" option.
"rm" does not show all the file details when you use the interactive '-i' option.
UnixDos will show you all details (ls -l) equivalent.
"sed" cannot handle lines longer than 1024 bytes which can easily be too short when you work with larger database dumps. UnixDos can handle lines up to 10,000 bytes.
UNIX "tail" cannot go back more than 4096 bytes. UnixDos can go back up the 20,000 bytes.
MKS (Trademark of Mortice Kern Systems Inc)
The biggest competitor to the "UNIX on DOS Toolkit
(UnixDos)" is the MKS Toolkit from Canada.
It is a great package but has the following limitations and drawbacks:
WinXs
This package is shareware for $15 but strictly runs all the UNIX utilities only as Windows applications, so you will have to point and click a lot and it is missing lots of utilities.
DOSNIX
This package is shareware for $35 but has no "regular
expression" or any of the other regular UNIX argument expansions
(try: ls a* or ls *exe). It also misses lots of UNIX utilities.
Some utilities are still in a very early stage (like df which shows you the free bytes but
no total bytes or percent used).
set EDITOR=b Editor to be used in "more" utility (default is vi)
set PATH=.... Main program directory list used from "which" utility
since UnixDos is such a long code for all the environment variables UD is used instead:
set UDDIFF=vdiff -b Defines the 'diff' program for the CMPDIR utility
set UDEXIT=c:\myexit.txt Defines the filename to store the exit value (test.exe, saveexit.bat)
set UDNETLST=G-Z Defines the list of network drives (used by df) (default is F-Z)
set UDNOSORT=ON suppress automatic file/directory sort during expansion
set UDRETRY=5 number of retries when verify fails (cp, mv) (default is 10)
set UDVER=ON Show the UnixDos utility version
set TMP=c:\temp point to temporary work directory (if not set root "/" is used)
set UDAF Custom environment for AF utility
set UDGREP Custom environment for GREP utility (and so forth for all utilities)
This powerful UnixDos argument expansion can get a bit confusing, so I created a small test utility, which just echos the arguments to put in and shows you the final arguments which would be passed into your program.
Example:
set UDSHOW_EXP=au*.bat;*.sys
show_exp $LIB `udate`
Will show::
Adding default environment: $UDSHOW_EXP=au*.bat;*.sys
Arguments before expansion:
--------------------------------------------------------
IN: argv[ 0] = c:\put\SHOW_EXP.EXE
IN: argv[ 1] = $LIB
IN: argv[ 2] = `udate
Arguments after expansion:
--------------------------------------------------------
OUT: argv[ 0] = c:/put/show_exp.exe
OUT: argv[ 1] = autoexec.bat
OUT: argv[ 2] = config.sys
OUT: argv[ 3] = io.sys
OUT: argv[ 4] = msdos.sys
OUT: argv[ 5] = pagefile.sys
OUT: argv[ 6] = c:\lib;c:\msvc\lib
OUT: argv[ 7] = Thu Aug 29 16:00:06 1996
Notice how the following expansions take place:
First the automatic environment for SHOW_EXP is pulled in and expanded,
I used the separator ';' to specify two regular expressions "au*.bat" and "*.sys":
UDSHOW_EXP -> OUT: argv[ 1] = autoexec.bat
OUT: argv[ 2] = config.sys
OUT: argv[ 3] = io.sys
OUT: argv[ 4] = msdos.sys
OUT: argv[ 5] = pagefile.sys
Then the general environment variable "LIB" is expanded:
$LIB -> OUT: argv[ 6] = c:\lib;c:\msvc\lib
And finally the UDATE utility is called and the result becomes the last argument:
`udate` -> OUT: argv[7] = Thu Aug 29 16:00:06 1996
If there is enough interest we are also planning to develop a user-friendly WINDOWS interface for all/most of the UnixDos utilities,
since it can be quite intimidating to remember all those cryptic UNIX command line options.
The following UNIX utilities are currently NOT part of the current UnixDos package: (maybe in the future they will!)
UNIX editor (vi)
AWK
Programmer Development utilities (ar, cc, ld, make, lex, size, yacc ...)
Shells (sh, ksh, csh)
Speller (spell, edspell, eddict)