paste(1)
这是一个处理文本的命令,之前一直没怎么用过,最近看 freebsd-update 的时候才知道有这么个玩意。
假设用 piconv 转换了一批 .txt 文件,并将其命名为对应的 .txt.new:
ls *.srt | \
awk -F \\r '{
print "piconv -f gbk -t utf8 \"" $1 "\" > \"" $1 ".new\""
}' | sh -x
(这个是个简单的例子,只考虑有空格,而没有考虑文件名中有换行、引号等情况;换行是为了排版方便)。
然后,想要把所有的 .txt.new 改名为 .txt,此时便可以用 paste。
首先生成两个列表,old.list 和 new.list,分别包括转换前后的文件名:
find . -name '*.txt' | sed -e s/^/\"/g -e s/\$/\"/g | sort > old.list
find . -name '*.txt.new' | sed -e s/^/\"/g -e s/\$/\"/g | sort > new.list
然后用paste:
paste new.list old.list | sed -e s/^/mv\ /g | sh -x
~~是的,你应该发现,用和第一步类似的方法也可以让 awk 干一样的事情。~~这里只是展示一下 paste(1) 的基本用法。