Bash Shell Skills
Execute GUI Programs
Execute GUI programs in background mode from terminal, and suppresses stdout and stderr.
(gui_program &>/dev/null &)
gui_program
is the command you’d like to execute for the GUI program.
You can also add the following code to ~/.bash_aliases
:
function xexec(){
($@ &>/dev/null &)
}
complete -cf xexec
The use command xexec gui_program arguments
to execute GUI programs in background mode from terminal with stdout and stderr suppressed.
Extract basename and extension
BASENAME="${FILENAME%.*}";
EXTENSION="${FILENAME##*.}";
Enumerate lines from stdin
IFS=$'\n';
for LINE in `ls`; do
#Do some works on "${LINE}"
done;
Enumerate command line arguments with space characters
while [ -n "${1}" ]; do
FILENAME="${1}";
#Do some works on "${FILENAME}"
shift 1;
done;
Batch Renaming Using Perl’s Rename Utility
Remove .bak
extension:
prename 's/\.bak$//' *
Convert filenames into lower case:
prename 'y/A-Z/a-z/' *
Add prefix for .txt
files:
prename 's/(.*).txt$/prefix_$1.txt/' *.txt
On ArchLinux, you must install package perl-rename
for this utility.
Find out text files with BOM header
Use find
command and file
command:
find . -type f -exec file {} \; | grep BOM
Use grep
command under bash shell:
grep -rlI $'^\xEF\xBB\xBF' .
Exclude files with given extension (Useful to skip binary files and large files):
grep -rlI $'^\xEF\xBB\xBF' --exclude=*.bin --exclude=*.dat .
find . -type f -not \( -ipath '*.bin' -o -ipath '*.dat' \) -exec file {} \; | grep BOM
Exclude .svn
directory:
grep -rlI $'^\xEF\xBB\xBF' --exclude-dir=.svn .
find . -type f -not \( -ipath '*.svn*' \) -exec file {} \; | grep BOM
Convert video into HTML5 compatible format
ffmpeg -i INPUT_FILE -c:v libx264 -crf 18 -c:a aac -q:a 100 -strict experimental OUTPUT.mp4
Adjust Tab Size For VIM
Add the following lines to /etc/vim/vimrc
:
set tabstop=4
set softtabstop=4
set shiftwidth=4
Backup file with gzip compression and date suffix
gzip -kS ".$(date '+%Y%m%d_%H%M').gz" backup_file