"The cosmic operating system uses a command line interface. It runs on something like a teletype, with lots of noise and heat; punched-out bits flutter down into its hopper like drifting stars. The demiurge sits at his teletype, pounding out one command line after another, specifying the values of fundamental constants of physics:
universe -G 6.672e-11 -e 1.602e-19 -h 6.626e-34 -protonmass 1.673e-27
and when he’s finished typing out the command line, his right pinky hesitates above the enter key for an aeon or two, wondering what’s going to happen; then down it comes—and the whack you hear is another Big Bang."
― Neal Stephenson, In the Beginning...Was the Command Line
Utility Bash shell scripts I've written - typically these will run on Unix, Linux, OS X, and possibly under Cygwin or the Windows Subsystem for Linux. Includes over 175 useful or convenient commands I've developed over decades of work on Unix and Linux operating system environments.
To clone:
git clone https://gitlab.com/doctorfree/DoctorFreeScripts.git
or
git clone git@gitlab.com:doctorfree/DoctorFreeScripts.git
DoctorFreeScripts version 3.1 and later includes both Debian and RPM format packages which can be used to install the DoctorFreeScripts utilities with either the Apt Package Management system or the Red Hat Package Management system. Support is also included for installing on Mac OS X. Other systems will require a manual installation described below. The Mac OS X installation procedure may also work under Microsoft's Windows Subsystem for Linux but it is as yet untested.
Many Linux distributions, most notably Ubuntu and its derivatives, use the Debian packaging system.
To tell if a Linux system is Debian based it is usually sufficient to
check for the existence of the file /etc/debian_version
and/or examine the
contents of the file /etc/os-release
.
To install on a Debian based Linux system, download the latest Debian format package from the DoctorFreeScripts Releases.
Install the DoctorFreeScripts package by executing the command
sudo apt install ./DoctorFreeScripts_<version>-<release>.deb
or
sudo dpkg -i ./DoctorFreeScripts_<version>-<release>.deb
Red Hat Linux, SUSE Linux, and their derivatives use the RPM packaging format. RPM based Linux distributions include Fedora, AlmaLinux, CentOS, openSUSE, OpenMandriva, Mandrake Linux, Red Hat Linux, and Oracle Linux.
To install on an RPM based Linux system, download the latest RPM format package from the DoctorFreeScripts Releases.
Install the DoctorFreeScripts package by executing the command
sudo yum localinstall ./DoctorFreeScripts_<version>-<release>.rpm
or
sudo rpm -i ./DoctorFreeScripts_<version>-<release>.rpm
Installation of DoctorFreeScripts on Mac OS X systems can be accomplished by
cloning the DoctorFreeScripts repository and executing the Install
script:
git clone `https://gitlab.com/doctorfree/DoctorFreeScripts.git`
cd DoctorFreeScripts
./Install
On Debian based Linux systems where the DoctorFreeScripts package was installed using the DoctorFreeScripts Debian format package, remove the DoctorFreeScripts package by executing the command:
sudo apt remove doctorfree-scripts
or
sudo dpkg -r doctorfree-scripts
On RPM based Linux systems where the DoctorFreeScripts package was installed using the DoctorFreeScripts RPM format package, remove the DoctorFreeScripts package by executing the command:
sudo yum remove DoctorFreeScripts
or
sudo rpm -e DoctorFreeScripts
On Mac OS X systems, the DoctorFreeScripts package can be removed by executing the "Uninstall" script in the DoctorFreeScripts source directory:
git clone git@gitlab.com:doctorfree/DoctorFreeScripts.git
cd DoctorFreeScripts
./Uninstall
Note: Removal may issue a warning about removing /usr/local
and other
folders within /usr/local
. This is an artifact of the Debian packaging system.
If you wish to silence that warning and prevent the Debian packaging system from
trying to remove /usr/local
then install the
core-custom-local Debian package.
Many DoctorFreeScripts commands have manual pages. Execute man <command-name>
to view the manual page for a command. Most commands also have
help/usage messages that can be viewed with the -u argument option,
e.g. any2any -u
.
Manual pages for these DoctorFreeScripts commands can be viewed by issueing the following commands:
- man any2any
- man ape2m4a
- man ape2mp4
- man avi2mp4
- man backgrounds
- man cap2any
- man cap2m4v
- man cap2mp4
- man f4v2mp4
- man flv2mp4
- man gh_get_latest
- man m4a2mp3
- man m4v2mp4
- man md2man
- man mkv2mp4
- man mov2mp4
- man mp42m4v
- man mpg2mp4
- man png2jpg
- man saver
- man sdbackup
- man sderase
- man sdlist
- man sdmount
- man sdrestore
- man sdumount
- man setwall
- man updgit
- man wma2m4a
- man wmv2m4v
- man wmv2mp4
- man xnvslides
The command line has a long and storied history in computing. Read some of that history, learn how to open a command line terminal window on various systems, how to get started using the command line, and see some examples of why the command line interface is so powerful by reading the DoctorFreeScripts wiki article Introduction to Using the Command Line.
This introduction to the command line includes three example use cases of automation using the command line:
- How to automate resizing of multiple images
- How to automate timed restaurant menu display
- How to automate timed playback of Roon playlists in specified Roon zones
LICENSE - Copyright and licensing, roughly the MIT license but without the heavy handed use of the caps lock key. for easy bulk downloading.
DoctorFreeScripts/IFTTT - Scripts to invoke IFTTT applets I've configured. These include scripts to manage my lights and devices like my AppleTV, Bluray player, and TV.
DoctorFreeScripts/MagicMirror - Scripts to manage my MagicMirror (https://magicmirror.builders/)
DoctorFreeScripts/Roon - Scripts to control my Roon audio system via the Roon API (https://pypi.org/project/roonapi/)
DoctorFreeScripts/Utils/bin - Utility scripts
DoctorFreeScripts/Wallpapers - Scripts to manage pics used for desktop wallpaper and slideshows
DoctorFreeScripts/binance - Scripts to access the Binance API providing command line support for placing buy/sell trade orders and retrieving ticker or average prices for trading pairs
DoctorFreeScripts/chrome-themes - Scripts to create and manage themes for the Chrome browser including themes I have created
DoctorFreeScripts/coinmarketcap - Scripts to access the Coinmarketcap API providing command line support for retrieving market info on specified cryptocurrency coins and tokens
DoctorFreeScripts/profittrailer - Scripts to access the ProfitTrailer API providing command line support for listing, loading, managing, switching ProfitTrailer configurations including trading strategies
add2itunes - Add the media files provided as arguments to the iTunes library. Uses OS X osascript to execute AppleScript.
any2any - Uses ffmpeg to convert from any audio/video format to any other
This program works by either linking or copying any2any to a file
which specifies the desired input and output formats by its name.
For example, if you want to convert from WMV to MP4 then you could
create a symbolic link from any2any to wmv2mp4 as follows:
ln -s any2any wmv2mp4
Similarly, symbolic links (or copies or hard links) could be created
to convert from any (3 lowercase letter representation) audio/video format
to any other audio/video format. Commonly used conversions include:
wmv2mkv avi2mpg wmv2mp4 and so on.
Naming restricton: [3 lowercase letters]2[3 lowercase letters]
for a 7 letter name with "2" in the middle. The 3 letter prefix
and suffix must also be a filename suffix that ffmpeg recognizes
as a supported audio/video format.
audlinks - Create symbolic links to audio files where possible to reduce duplicate storage of songs. Link into my iTunes library.
bash_aliases - Bash aliases, install in $HOME/.bash_aliases
bash_profile - Bash profile, install in $HOME/.bash_profile
bashrc - Bash startup, install in $HOME/.bashrc
cap2any - Uses ffmpeg to capture screen video and write to the specified audio/video format
This program works by either linking or copying cap2any to a file
which specifies the desired output format by its name.
Alternately, the -o command line option can be used to specify
the output file format.
For example, if you want to capture to MP4 then you could
create a symbolic link from cap2any to cap2mp4 as follows:
ln -s cap2any cap2mp4
Similarly, symbolic links (or copies or hard links) could be created to
capture to any other audio/video format. Default output format is AVI.
chkall - Invokes "chk" to check the Aperture, Movies, and Pictures rsync'd directories and sync them if specified and necessary
chk - Check the specified directories/libraries and see if they need to by sync'd with rsync to the USB flash drive backup
Note: to check other directories use the -s, -a, and -t arguments
When invoked as chkaplibs it checks directories in my Apertures libraries
When invoked as chkpicdir it checks directories in my Pictures dir
When invoked as chkmovdir it checks directories in my Movies dir
When invoked as chkhome it checks directories in $HOME
chkinst - Check if installed versions of files in current directory are different in order to determine if git repository is up-to-date.
clndl - Moves the most recently downloaded versions of files to their regular filename without the (#) in the name. By default, relies on the Mac OS X convention of inserting (#) in the name of newer version filenames.
cpBackups - Copy, Move, or Remove Time Machine backups with bypass command. Depending on how this command is invoked (cpBackups, mvBackups, or rmBackups) or what arguments are supplied on the command-line, this will copy, move, or remove Time Machine backups using the bypass command
cron.bash - Set SHELL=/usr/local/bin/cron.bash in your crontab to use this script to execute commands via cron. Modify this script to set any additional environment variables cron jobs might need, the PATH to use, etc.
dash2space - Convenience script to replace the first occurence of "-" in all MP3 filenames in this directory with " ". For example, this would rename "03-My Song.mp3" to "03 My Song.mp3".
dircolors - Settings for the dircolors utility to enable color support of ls. Install as $HOME/.dircolors
eject - Convenience script to eject the CD/DVD
femzip - Convenience script to unzip Femjoy photo downloads
filenuminc - Convenience script to rename files beginning with a track number after increasing the number by some previously ripped number of tracks. For example, the command "filenuminc 11" would rename "04 My Song.mp3" to "15 My Song.mp3".
filenumset - Convenience script to rename files beginning without a track number to a filename with track number as prefix. For example, the command "filenumset foo.mp3" might rename "foo.mp3" to "5 foo.mp3".
find2import - Find and report photo albums and movies that may not have already been imported to iTunes
findbroken - Find and save a list of broken symbolic links in current directory
findempty - Find and report empty directories. Optionally, remove them.
findgrep - Recursive grep in current directory.
gethue - Retrieve info on lights, scenes, configuration, etc from Philips Hue bridge.
gitlog - pretty format the output of "git log ..."
latest - List the top N newest files in a directory or hierarchy
mandelhist - Display a zoom on the Mandelbrot set with histograms using a built-in ffplay/ffmpeg filter.
mkcomps - Join 2 or 3 images then split the resulting composite in half. Uses ImageMagick.
md2man - Generate man pages from markdown using pandoc
mkreadme - Creates a Readme.html in all subdirectories. Assumes a directory and file structure of Artist/Album/Tracks. A quick way to populate my USB drives with HTML documents to provide an initial way to navigate around. This currently only dives two levels deep to allow for Artist/Album/Tracks directory structure:
Artist Name/
Album Name/
Pics/if-any.jpg (put cover art and other pics in Pics folder)
Track1.m4a
Track2.m4a (and so on, any file format)
Year (Year file should just be year released in parens)
mkseamless - Make a texture seamless. Uses ImageMagick and the Vertical.png image located in this repository.
Vertical.png should be placed in /usr/local/lib on the system where
mkseamless is run.
mkwmv - Creates a Readme.html in all subdirectories.
Assumes all files of interest are WMV, MOV, MP4, or AVI. A quick way to
populate my USB flash drive of movies with HTML documents to provide an
initial way to navigate around.
mvfem - Rename a downloaded Femjoy zip archive that contains two model names to use only one model's name so it will work with femzip.
only - Report files or directories only in one directory hierarchy but not in a second directory hierarchy.
packaud - archive and compress my Audacity project files.
piclinks - Create symbolic links to photo files where possible to reduce duplicate storage of photos. Link into my Aperture libraries.
progress_bar - Function to display a progress bar and percent complete
revlink - Reverse the direction of symbolic links
stop_leapd - Stop the Leap Motion daemon and agent then backup and remove the plist files so they do not auto start. Includes Bash functions to replace auto start with manual start/stop
upd - Sync specified libraries/directories to a USB flash drive
Note: to sync other directories use the -s, -a, and -t arguments
When invoked as updaplibs it syncs directories in my Aperture libraries
When invoked as updpicdir it syncs directories in my Pictures dir
When invoked as updmovdir it syncs directories in my Movies dir
When invoked as updhome it syncs directories in $HOME
updgit - Perform the git add, git commit, and git push to the remote repository associated with this clone.
updsums - Create or update a SUMS file which contains chksums for all files in that directory hierarchy
updflash - Convenience script to frontend the rsyncs needed to sync my flash drive using my "upd" script.
vidlinks - Create symbolic links to movie files where possible to reduce duplicate storage of movies. Link into my iTunes library.
vimrc - Vim startup configuration file. Install as $HOME/.vimrc
wikivim - Use in conjunction with It's All Text Firefox Add-On to use Vim to edit wiki pages. On OS X use Applescript and iTerm 2, otherwise use Bash and xterm.