bash berries is a set of tiny bash scripts that can do some work for you if you are a Linux admin or a developer on Linux.
Not only scripts are being provided by this project, but also include files that help you to write our own bash scripts more quickly. All bash berries have been tested on the latest stable Ubuntu LTS and macOS releases. If you don't set any parameters for a script, a short help will be printed.
Install or update
bash <(curl -Ls https://bit.ly/update-bashberries) ~/bin
Install or update troubleshooting
Make sure that you have the unzip utility installed and that you can connect to the internet, double check proxy settings if applicable.
Overview of the bash berries
|bigfiles||Determines the biggest files in a directory and it's subdirectories|
|deepgrep||Finds text in files recursively|
|latlng||Determines both latitude and longitude of a location|
|lines||Extracts a block of lines from a textfile|
|m3u8tomp4.sh||Converts all .m3u8 files in the current working dir to .mp4|
|pwned||Has your password been pwned?|
|update_jdk||Downloads the latest JDK from the web, extracts it and creates a symlink|
|update_property||Updates the value of a key/value pair in a property file|
|update_bashberries||Downloads all bash scripts from the bashberries project on github|
|update_tzdatabase||Updates the time zone database of your Java Runtime Environment|
Overview of the include files
|interaction.include||provides functions for an user interaction|
|math.include||provides mathematical functions|
|network.include||provides specific network functions|
|permissions.include||provides functions that are related to permissions|
|proxy.include||provides proxy related functions|
|trim.include||provides several trim functions|
|version.include||provides version specific functions|
The bash berries in detail
bigfiles v1.1.0, Copyright 2017 Johann N. Loefflmann Determines the biggest files in a directory and it's subdirectories Usage: bigfiles [-o] [-g greater] [-n max_files] [path] Options: -o print the owners of the biggest files. -g greater a file is a big file if its file size is greater than the greater value. You may append k, M, G and T for kilo, Mega, Giga, and Tera. If greater is omitted, greater is set to 0. -n max_files specifies the maximum number of big files. If max_files is omitted or if max_files is set to 0, all files will be printed that matches -g. Parameters: path specifies the directory to be traversed. If path is omitted, this help will be printed. Examples: bigfiles -g 1M . all files greater than 1 MB in the current working directory and below. bigfiles -o -n 25 -g 1G / 25 biggest files > 1 GB in the root directory and below including a summary of the owners of those files.
deepgrep v1.0.0, Copyright 2018 Johann N. Loefflmann Finds text in files recursively. Usage: deepgrep [-f file filter] [path] <text> Options: -f file filter Parameters: path where to search; optional text what to search Examples: deepgrep -f *.mine "Gold" searches for "Gold" in all .mine files in the current folder and all subfolders deepgrep -f *.mine /big/mountain "Gold" searches for "Gold" in all *.mine files in the /big/mountain folder and all subfolders
latlng v1.0.0, Copyright 2017 Johann N. Loefflmann Determines both latitude and longitude of a location. The script uses the Google Maps web service. Usage: latlng [-c][-i] [location] Options: -c output as one line separated by a comma -i input in interactive mode Parameters: location the location as a string Examples: latlng "Statue of Liberty" determines lat and lng of the Statue of Liberty latlng -ic reads input from the user in order to determine lat and lng
lines v1.0.0, Copyright 2017 Johann N. Loefflmann Extracts a block of lines from a textfile Usage: lines [-i] [-b number] [-e number] [-H number] [-T number] [file [begin [end]]] Options: -b number If begin is a string and if it matches more than one line, you can specify a particular match number. -e number If end is a string and if it matches more than one line, you can specify a particular match number. -i Ignore case. Perform case insensitie matching. By default, the search algorithm is case sensitive. -H number A positive number cuts the head of the output. A negative number extends the head of the output. -T number A postivie number extends the tail of the output. A negative number cuts the tail of the output. Parameters: file Specifies the textfile that needs to be processed. If file is omitted, this usage will be printed. begin Specifies the search string in order to find the "begin". If begin is a string, it searches for the first occurence in the file. If begin is an integer, it specifies a line number (starting with 1). end Specifies the search string in order to find the "end". If end is a string, it searches for the first occurence starting with the line that is specified by "begin". If end is an integer, it specifies a line number (starting with 1). Examples: lines log.txt 20 40 Prints line number 20 to line number 40 from the file called log.txt lines -T -1 verylong.log "^2017-08-06" "^2017-08-07" Prints lines from the log file called verylong.log, starting with the line that starts with "2017-08-06" and ending with the line that starts with "2017-08-07", but not printing out that last ending line
no options, no parameters. It just converts all .m3u8 files in the current working directory to .mp4. It expects the latest ffmpeg binary in the script dir. It exits if there is an error. In case of success, the .m3u8 will be removed.
update_jdk v1.20.0, Copyright 2019-2020 Johann N. Loefflmann Downloads the JRE/JDK from the web, extracts it and creates/updates a symlink called <type>_latest. The latest timezone database can be applied to the requested JRE/JDK as well so that you have the most possible up to date JRE/JDK within a Java family from your preferred source. And since the symlink always points to the JRE/JDK you can update the JRE/JDK both fast and comfortable. Both GNU/Linux and macOS are supported. Usage: update_jdk [ [-h] | [-d] [-f] [-k] -s source [-t type] [-z] [-Z location] [path] ] Options: -d dry run. Don't download the JRE, JDK or tzupdater, just inform the user. -f force. Even if we have the JRE, JDK or tzupdater already, update it again. -h prints this help. -k keep the downloaded .tar.gz resp. .zip, don't remove it at the end. -s source. The URI should start with http or https and point to a .tar.gz file that contains the JRE/JDK binaries. You can find JRE/JDK tarballs for example at - adoptopenjdk.net - azul.com - bell-sw.com/java - java.com - jdk.java.net - www.oracle.com/java -t type. The name of the symlink prefix, if not specified, jre is used. -v version. Prints out the version of this script. -z after the JRE or JDK has been downloaded and extracted, the latest tzdata will be applied to the JRE or JDK. The script expects the tzupdater.jar in the /Users/johann/IdeaProjects/bashberries/bin -Z the timezone files if not from IANA. Parameters: path specifies the path where the JRE, JDK should be stored. It will be created if it doesn't exist. If omitted, .<type>/ will be used. Examples: ./update_jdk -s "$ADDRESS" downloads the JRE tarball from "$ADDRESS", extracts it, and updates the JRE in ./jre/ and it creates a symlink called jre_latest there. ./update_jdk -s "$ADDRESS" -z myjres updates the JRE in myjres and it updates the symlink called jre_latest there. Additionally the timezone updater is being called so that the JRE's timezone database also gets updated. ./update_jdk -s "$ADDRESS" -t jdk /opt/java/ updates the JDK in /opt/java/ and it updates a symlink called jdk_latest there. ./update_jdk -z -s "$ADDRESS" -t openjdk11 downloads the JDK from "$ADDRESS", applies the latest timezone database from IANA to the JDK by calling the tzupdater tool. Symlink called openjdk11/openjdk11_latest will point to the latest and updated OpenJDK11 build.
update_property v1.2.0, Copyright 2017,2018 Johann N. Loefflmann Updates the value of a key/value pair in a property file. The script saves existing comments and also the order of the properties. Usage: update_property [-d <delimiter>] [-e] [-f] [-q] [file key value] Options: -a keeps the existing value and appends the new value. -d delimiter, delimits the key and the value. If omitted the equal sign is assumed. -e echo the updated line of the file. -f force to append the key/value pair to the file even if the key is not in the property file yet. -p keeps the existing value and prepends the new value. -q set quotes around the value when writing the value. Parameters: file specifies the file that needs to be updated. key specifies the key in the property file. value specifies the value for the key. Examples: update_property -f -q app.conf mykey "new value" updates the key called "mykey" with the value called "new value" with quotes around the value in the app.conf property file, and creates the key/value pair if the key does not exist. update_property -d ' ' -e /etc/openvpn/vpn.conf remote "my-server-1 1194" updates the key called "remote" in the property file that has a blank as the delimiter, it also echoes the modified line.
update_bashberries v1.2.0, Copyright 2017-2018 Johann N. Loefflmann Downloads the latest bash scripts from the bashberries project on github and updates any existing scripts in the directory that has been specified. Usage: update_bashberries [-n] <directory> Options: -n don't check for a new update_bashberries script Parameter: directory the directory where the scripts should be stored Examples: ./update_bashberries . updates the bashberries in the current working directory bash <(curl -Ls http://bit.ly/update-bashberries) ~/bin updates the bashberries in ~/bin with just this line
update_tzdatabase v1.0.2, Copyright 2017-2018 Johann N. Loefflmann Downloads the latest timezone data from iana.org, calculates the necessary sha256 digest by calling jacksum, and updates the timezone database of your Java Runtime Environment by calling tzupdater.jar Usage: update_tzdatabase [ [-h] | [-j java-binary] [-s jacksum.jar] [-t tzupdater.jar] ] Options: -h prints this help. -j java location of the java binary. If omitted, default java is used. -s jacksum.jar location of the jacksum.jar file. If omitted, jacksum.jar is expected in the script dir. -t tzupdater.jar location of the tzupdater.jar file. If omitted, tzupdater.jar is expected in the script dir. Examples: update_tzdatabase updates the tzdatabase of the default JRE. sudo ./update_tzdatabase -j \$(type -P java) updates the tzdatabase of the default JRE using root permissions.