提取Flash视频的脚本
Adobe邪恶了…
以前在Linux下提取Flash视频很容易, 只要去/tmp下找Flash开头的文件保存就好, 但是最近几个版本的Flash插件却找不到这些缓存文件了.
研究了一下, 发现这些文件其实还是在/tmp下, 但是文件建立打开之后inode却被删掉了, 所以不可见, 确实有点邪恶吧? 但是既然文件是打开的状态, lsof就肯定能看到, /proc中就肯定有它的文件描述符, 剩下的事情比较容易, 脚本如下:
#!/bin/sh
DESTDIR="${HOME}/Videos/Flash"
if [ ! -d "$DESTDIR" ]
then
mkdir -p $DESTDIR || exit 1
fi
LINES=`lsof |grep '/tmp/Flash[^ ]*'`
IFS=$'\n'
for i in $LINES
do
FILE=`echo $i |awk '{print "/proc/" $2 "/fd/" $4}' |sed 's/[rwu]$//'`
NAME=`echo $i |awk '{print $9}' |awk -F '/' '{print $3}'`
cp $FILE ${DESTDIR}/${NAME}.flv
done
exit 0
这里面的目标存放文件夹我指定的是~/Videos/Flash, 如果想放到别的地方, 改DESTDIR这个变量就好.
另外, 这个脚本很简单, 但是写的过程中我也学到了一个小技巧, 就是IFS(Internal Field Separator)这个变量, 这个变量告诉了shell在处理字符串时如何判断一个词, 默认值是空格, Tab和换行, 我把它给设置成了只有换行, 因为我想在后面的for循环中每次处理一行而不是一个词.