分页: 1 / 1

[已解决]求脚本:复制a文件夹文件到b文件夹(根据mime-type复制指定类型文件)

发表于 : 2009-11-07 21:04
xinzhi
A目录:Firefox缓存,如/tmp/firefox/cache
B目录:音乐文件夹,如/home/tux/Music/downloads

firefox缓存中的mp3没有后缀名,只能根据MP3 audio (audio/mpeg)的mime-type确定.mp3文件都多个.脚本最好能30秒循环运行,定期提取mp3存盘.

rsync好像没有根据mime-type同步指定文件的功能,希望能用一个shell脚本完成,最好不要用到python.

======================================已解决的分割线=========================

代码(感谢aerofox提供代码):

代码: 全选

#!/bin/sh

#设定文件夹位置
fxCacheDIR="/dev/shm/firefoxcache/Cache/"
MuiscDIR_TMP="/home/xinzhi/音乐/thesixtyone/tmp/"

#提取缓存文件存盘
for f in $fxCacheDIR*; do
    [ `file -b --mime-type "$f"` = audio/mpeg ] && cp -u "$f" $MuiscDIR_TMP
done

#重命名文件(可选操作)
rename() { 
        cd $MuiscDIR_TMP
	ls |while read name;do
		ti=`mid3v2 -l $name |grep TIT2 |sed 's/^.*=//'`
		tl="mp3"
		[ "$ti" ] && mid3iconv -e gb2312 "$name"
		[ "$ti" ] || continue
		[ "$name" != "$ti.$tl" ] && mv "$name" "$ti.$tl" &&\
		echo "重命名\033[;32m <$name> \033[0m为\033[;32m <$ti.$tl> \033[0m"
	done	
	
}

#执行重命名操作,如果需要
if [ "$1" = "-rename" ];then
	echo "即将重命名当前文件夹的所有音乐" && rename
fi
注:
/dev/shm/firefoxcache/Cache/为我的Firefox缓存目录
/home/xinzhi/音乐/tmp/为文件暂存文件夹。
mp3重命名代码来自xiooli, 有修改, 也表示感谢!

使用方法:
1)保存代码为脚本,直接运行。
2)终端下运行,加入参数 -rename可对文件进行重命名和编码操作,需要python-mutagen支持。
3)加入conky里面可循环运行,自动保存网络视听歌曲。

相关文章:
Linux shell自动从浏览器缓存提取mp3(FLV)文件存盘 #Firefox #Linux #mp3 #FLV

Re: 求脚本:复制a文件夹文件到b文件夹(根据mime-type复制指定类型文件)

发表于 : 2009-11-07 23:03
aerofox
30秒热循环应该很容易实现吧,我给个判断 mime-type 的方法:

代码: 全选

for f in /tmp/firefox/cache/*; do
    [ `file -bi "$f"` = audio/mpeg ] && cp -u "$f" /home/tux/Music/downloads/"$f".mp3
done

Re: 求脚本:复制a文件夹文件到b文件夹(根据mime-type复制指定类型文件)

发表于 : 2009-11-08 0:07
xinzhi
aerofox,

循环运行容易搞定。您给代码快成功了,只是现在还有些小问题,运行脚本后输出如下:
./savemp3.sh
[: 4: image/png;: unexpected operator
[: 4: image/png;: unexpected operator
[: 4: image/png;: unexpected operator
[: 4: application/x-gzip;: unexpected operator
[: 4: image/gif;: unexpected operator
[: 4: image/png;: unexpected operator
[: 4: image/jpeg;: unexpected operator
[: 4: text/x-c;: unexpected operator
[: 4: image/jpeg;: unexpected operator
[: 4: application/x-gzip;: unexpected operator
[: 4: image/jpeg;: unexpected operator
[: 4: application/x-gzip;: unexpected operator
[: 4: image/jpeg;: unexpected operator
[: 4: image/gif;: unexpected operator
[: 4: image/gif;: unexpected operator
[: 4: application/x-shockwave-flash;: unexpected operator
[: 4: image/jpeg;: unexpected operator
[: 4: application/x-gzip;: unexpected operator
[: 4: image/png;: unexpected operator
[: 4: application/x-shockwave-flash;: unexpected operator
[: 4: image/png;: unexpected operator
[: 4: image/jpeg;: unexpected operator
[: 4: application/x-shockwave-flash;: unexpected operator
[: 4: application/x-gzip;: unexpected operator
[: 4: application/x-gzip;: unexpected operator
[: 4: text/html;: unexpected operator
[: 4: image/jpeg;: unexpected operator
[: 4: image/jpeg;: unexpected operator
[: 4: audio/mpeg;: unexpected operator
[: 4: image/jpeg;: unexpected operator
[: 4: audio/mpeg;: unexpected operator
[: 4: audio/mpeg;: unexpected operator
[: 4: image/png;: unexpected operator
[: 4: image/jpeg;: unexpected operator
[: 4: application/x-shockwave-flash;: unexpected operator
[: 4: audio/mpeg;: unexpected operator
[: 4: application/x-gzip;: unexpected operator
[: 4: image/jpeg;: unexpected operator
[: 4: image/gif;: unexpected operator
[: 4: application/octet-stream;: unexpected operator
[: 4: application/octet-stream;: unexpected operator
[: 4: application/octet-stream;: unexpected operator
[: 4: application/octet-stream;: unexpected operator
源目录文件存在;目标目录为空,没有成功提取文件。

Re: 求脚本:复制a文件夹文件到b文件夹(根据mime-type复制指定类型文件)

发表于 : 2009-11-08 0:19
cnkilior

代码: 全选

file -bi a.pl
text/x-perl; charset=us-ascii

Re: 求脚本:复制a文件夹文件到b文件夹(根据mime-type复制指定类型文件)

发表于 : 2009-11-08 10:06
aerofox
没想到 file 输出有时候还会多些尾巴
那就改一下试试:

代码: 全选

for f in /tmp/firefox/cache/*; do
    [[ `file -bi "$f"` == audio/mpeg* ]] && cp -u "$f" /home/tux/Music/downloads/"$f".mp3
done
楼主贴的错误我没看出是怎么产生的,能不能把代码贴出来看看。

Re: 求脚本:复制a文件夹文件到b文件夹(根据mime-type复制指定类型文件)

发表于 : 2009-11-08 11:05
xinzhi
aerofox,
代码:

代码: 全选

#!/bin/bash
for f in /dev/shm/firefoxcache/Cache/*; do
    [ `file -bi "$f"` = audio/mpeg* ] && cp -u "$f" /home/xinzhi/音乐/thesixtyone/tmp/"$f".mp3
done
输出:
./savemp3.sh
./savemp3.sh: line 3: [: 过多的参数
./savemp3.sh: line 3: [: 过多的参数
./savemp3.sh: line 3: [: 过多的参数
./savemp3.sh: line 3: [: 过多的参数
./savemp3.sh: line 3: [: 过多的参数
./savemp3.sh: line 3: [: 过多的参数
./savemp3.sh: line 3: [: 过多的参数
./savemp3.sh: line 3: [: 过多的参数
./savemp3.sh: line 3: [: 过多的参数
./savemp3.sh: line 3: [: 过多的参数
./savemp3.sh: line 3: [: 过多的参数
./savemp3.sh: line 3: [: 过多的参数
./savemp3.sh: line 3: [: 过多的参数
./savemp3.sh: line 3: [: 过多的参数

然后用sh:

代码: 全选

#!/bin/sh
for f in /dev/shm/firefoxcache/Cache/*; do
    [ `file -bi "$f"` = audio/mpeg* ] && cp -u "$f" /home/xinzhi/"$f".mp3
done
输出:
./savemp3.sh
[: 4: image/png;: unexpected operator
[: 4: application/x-gzip;: unexpected operator
[: 4: application/x-gzip;: unexpected operator
[: 4: image/gif;: unexpected operator
[: 4: application/x-shockwave-flash;: unexpected operator
[: 4: image/png;: unexpected operator
[: 4: application/x-gzip;: unexpected operator
[: 4: audio/mpeg;: unexpected operator
[: 4: application/x-gzip;: unexpected operator
[: 4: image/png;: unexpected operator
[: 4: audio/mpeg;: unexpected operator
[: 4: application/octet-stream;: unexpected operator
[: 4: application/octet-stream;: unexpected operator
[: 4: application/octet-stream;: unexpected operator
[: 4: application/octet-stream;: unexpected operator
xinzhi@xinzhi-desktop:~/桌面$


xinzhi@xinzhi-desktop:/dev/shm/firefoxcache/Cache$ file -bi *
image/png; charset=binary
application/x-gzip; charset=binary
application/x-gzip; charset=binary
image/gif; charset=binary
application/x-shockwave-flash; charset=binary
image/png; charset=binary
application/x-gzip; charset=binary
audio/mpeg; charset=binary
audio/mpeg; charset=binary
application/octet-stream; charset=binary
application/octet-stream; charset=binary
application/octet-stream; charset=binary
application/octet-stream; charset=binary
application/x-gzip; charset=binary
image/png; charset=binary
audio/mpeg; charset=binary
xinzhi@xinzhi-desktop:/dev/shm/firefoxcache/Cache$


不知道是不是bash和sh出错使脚本失效。

Re: 求脚本:复制a文件夹文件到b文件夹(根据mime-type复制指定类型文件)

发表于 : 2009-11-08 11:19
xinzhi
哈,我成功啦。

代码: 全选

#!/bin/sh
for f in /dev/shm/firefoxcache/Cache/*; do
    [ `file -b --mime-type "$f"` = audio/mpeg ] && cp -u "$f" /home/xinzhi"$f".mp3
done
$f有包含路径,所以我用了些笨方法创建些多余目录。