https://gist.github.com/4139094
<u><b>Commands and features:</b></u><ul>
<li>cd - change directory</li>
<li>pwd - print current working directory</li>
<li>ls - list directory contents (and file sizes)</li>
<li>cat - print the contents of a file</li>
<li>q/quit/exit/logoff/logout - exit the shell</li>
<li>mkdir - make a directory</li>
<li>mv - move or rename files / directories</li>
<li>cp - copy files / directories (recursively)</li>
<li>rm - delete files / directories (recursively)</li>
<li><b>unzip</b> - unzip zip archives</li>
<li><b>untar</b> - untar tar archives</li>
<li><b>ungzip / gunzip</b> - ungzip gzipped files</li>
<li>Supports <b>wildcard matches</b> (matching any number of characters)</li>
<li>Supports <b>? / question mark matches</b> (matching exactly one of any character)</li>
<li>Supports <b>[ranges]</b> (like [a-z], [0-9], [a-f0-9], etc.)</li>
<li>Supports <b>~ / tilde replacement</b> (defaults to Documents folder)</li>
<li>Supports <b>environment variables</b> ($HOME, but you can expand it)</li>
<li>Supports <b>single quote escaping</b> (special characters are disabled)</li>
<li>Supports <b>backslash escaping</b> (for individual special characters)</li>
<li>Supports <b>double quotes</b> (for preserving spaces, but allowing special sequences)</li></ul>
<u>Examples of advanced usage:</u>
<b>ls .py /.py</b> (lists all .py files in current directory and at the top level of any folders in current directory)
<b>cp ~/.py backup</b> (copies all python scripts in the root scripts directory to a folder named 'backup')
<b>rm test[1-3]?.txt</b> (removes files test1a.txt, test2a.txt, test2b.txt, test2c.txt, test3-.txt, etc.)
This is an intial (rough) port of a script I put together for another python interpreter on the app store. I'll be porting the rest of the commands soon: unzip, ungzip, untar, wget/curl (basic download functionality)
Enjoy :)
<br>
<b>For the interested programmer:</b>
This script uses a pure python re-implementation of some of the more basic globbing of "bash" which I wrote up myself. It's a little different than shlex, glob, or shlex+glob in that matching happens in a single parsing run through. It depends on glob for wildcard handling, but only after my code has already handled all character escapes and word parsing.
<u>An example where shlex/glob fails:</u>
In the current working directory are three files: 'test apple', 'peach', 'test a*' (with an asterisk as part of the name)
The command to parse is the string: rm 'test a*' peach
shlex interprets it as ['rm', 'test a*', 'peach'], which glob then interprets the file portion as a match of three files: ['test apple', 'test a*', 'peach']. shlex unfortunately clobbers quotes that in a bash environment specify that the special character should be treated as a literal. This would result in deletion of <b>all 3 files</b>.
With my parser, the single quotes around 'test a*' are interpreted bash-style to mean escaping of the special character '' - disabling it as a wildcard match and turning it into a literal match, resulting in the deletion of only two files: 'test a' and 'peach'.