Bash使用技巧


从终端运行GUI程序

从终端以后台方式运行GUI程序,并抑制标准输出和标准错误输出。

(gui_program &>/dev/null &)

gui_program是运行GUI程序相关的命令。


从给定文件名中获取基本名和扩展名

基本名:BASENAME="${FILENAME%.*}";
扩展名:EXTENSION="${FILENAME##*.}";


按行遍历标准输出

IFS=$'\n';
for LINE in `ls`; do
	#Do some works on "${LINE}"
done;

遍历带空格的命令行参数

while [ -n "${1}" ]; do
	FILENAME="${1}";
	#Do some works on "${FILENAME}"
	shift 1;
done;

如何使用Perl的rename工具进行批量重命名

去除.bak扩展名:

prename 's/\.bak$//' *

将文件名转换成小写:

prename 'y/A-Z/a-z/' *

.txt文件加前缀:

prename 's/(.*).txt$/prefix_$1.txt/' *.txt

ArchLinux上需要安装perl-rename包来获得该工具。


如何找出带BOM头的文本文件

使用find命令和file命令:

find . -type f -exec file {} \; | grep BOM

在bash shell中使用grep命令:

grep -rlI $'^\xEF\xBB\xBF' .

排除特定扩展名的文件(可用于跳过二进制文件和大文件):

grep -rlI $'^\xEF\xBB\xBF' --exclude=*.bin --exclude=*.dat .
find . -type f -not \( -ipath '*.bin' -o -ipath '*.dat' \) -exec file {} \; | grep BOM

排除.svn目录:

grep -rlI $'^\xEF\xBB\xBF' --exclude-dir=.svn .
find . -type f -not \( -ipath '*.svn*' \) -exec file {} \; | grep BOM

将视频转换成兼容HTML5的格式

ffmpeg -i INPUT_FILE -c:v libx264 -crf 18 -c:a aac -q:a 100 -strict experimental OUTPUT.mp4

调整VIM的制表符宽度

将以下内容加入到/etc/vim/vimrc中:

set tabstop=4
set softtabstop=4
set shiftwidth=4

" 使用空格代替tab字符
set expandtab

使用gzip备份文件,并为备份文件名添加日期后缀

gzip -kS ".$(date '+%Y%m%d_%H%M').gz" backup_file