分页: 1 / 1

如何批量移动同一类型的文件

发表于 : 2011-09-22 17:00
ctrl-fairy
因为经常下载文件,默认都在Downloads下,想要写一段脚本批量移动文件。如文件类型为jpeg,jpg,png之类的移动到图片文件夹pictures下;doc之类的移动到documents下……,因为不是所有的文件都附有相应的后缀名,因此只能采用file命令,所以想问使用怎样的语句查询文件属性并移动。 :em02 菜鸟新学,所以对此不大懂,望指导一二。

Re: 如何批量移动同一类型的文件

发表于 : 2011-09-22 17:24
lilydjwg
[bash]
cd ~/Downloads
for file in *; do
dst=../classfied/${file##*.}
mkdir -p "$dst"
mv "$file" "$dst"
done
[/bash]
未测试,出事自理。

Re: 如何批量移动同一类型的文件

发表于 : 2011-09-22 17:46
sk1418
lilydjwg 写了:[bash]
cd ~/Downloads
for file in *; do
dst=../classfied/${file##*.}
mkdir -p "$dst"
mv "$file" "$dst"
done
[/bash]
未测试,出事自理。
你这个可能不满足他需求。
如文件类型为jpeg,jpg,png之类的移动到图片文件夹pictures

Re: 如何批量移动同一类型的文件

发表于 : 2011-09-22 17:49
sk1418
lz我觉得,你不如写个脚本,里面就是按你要求罗列的几个find

代码: 全选

find 特定类型 |xargs mv 到特定文件夹。
就得了。

Re: 如何批量移动同一类型的文件

发表于 : 2011-09-22 18:20
lilydjwg
sk1418 写了:
你这个可能不满足他需求。
如文件类型为jpeg,jpg,png之类的移动到图片文件夹pictures
哦,没注意。。。。
[bash]
cd ~/Downloads
for file in *; do
dst=../classfied/$(file -i "$file" | grep -oP '(?<=: )\w+(?=/)' )
mkdir -p "$dst"
mv "$file" "$dst"
done[/bash]

类似这样子的。

Re: 如何批量移动同一类型的文件

发表于 : 2011-09-22 19:19
sk1418
lilydjwg 写了:
sk1418 写了:
你这个可能不满足他需求。
如文件类型为jpeg,jpg,png之类的移动到图片文件夹pictures
哦,没注意。。。。
[bash]
cd ~/Downloads
for file in *; do
dst=../classfied/$(file -i "$file" | grep -oP '(?<=: )\w+(?=/)' )
mkdir -p "$dst"
mv "$file" "$dst"
done[/bash]

类似这样子的。
这个也不行,比如一个gz文件,application/x-gzip,你获取的是application, 而一个pdf文件,你获取的也是application。这2个显然不是一类文件。

所以我说,这个文件的“类型” 有认为定义的成分,不如就写几个find|mv,什么时候发现有少的,或有改的,就改这个脚本就行了。 自动判断不是不可能,得维护一个dict,还不如弄几个find省事呢。

Re: 如何批量移动同一类型的文件

发表于 : 2011-09-22 20:59
ctrl-fairy
lilydjwg 写了:
sk1418 写了:
你这个可能不满足他需求。
如文件类型为jpeg,jpg,png之类的移动到图片文件夹pictures
哦,没注意。。。。
[bash]
cd ~/Downloads
for file in *; do
dst=../classfied/$(file -i "$file" | grep -oP '(?<=: )\w+(?=/)' )
mkdir -p "$dst"
mv "$file" "$dst"
done[/bash]

类似这样子的。
尝试成功了,谢谢,正在学习这个脚本 :em03 --grep的部分还有些不大明白。

Re: 如何批量移动同一类型的文件

发表于 : 2011-09-22 21:03
ctrl-fairy
sk1418 写了:
lilydjwg 写了:
sk1418 写了:
你这个可能不满足他需求。
如文件类型为jpeg,jpg,png之类的移动到图片文件夹pictures
哦,没注意。。。。
[bash]
cd ~/Downloads
for file in *; do
dst=../classfied/$(file -i "$file" | grep -oP '(?<=: )\w+(?=/)' )
mkdir -p "$dst"
mv "$file" "$dst"
done[/bash]

类似这样子的。
这个也不行,比如一个gz文件,application/x-gzip,你获取的是application, 而一个pdf文件,你获取的也是application。这2个显然不是一类文件。

所以我说,这个文件的“类型” 有认为定义的成分,不如就写几个find|mv,什么时候发现有少的,或有改的,就改这个脚本就行了。 自动判断不是不可能,得维护一个dict,还不如弄几个find省事呢。
的确出现了这种情况,呵呵 :em06 。谢谢了,的确是好的,不过有时有些太繁琐,我还是尝试结合看看。

Re: 如何批量移动同一类型的文件

发表于 : 2011-09-22 21:06
naturalaw
写个脚本嘛.

代码: 全选

if ;then
elif ;then
...
fi
or

代码: 全选

case.

Re: 如何批量移动同一类型的文件

发表于 : 2011-09-22 22:24
lilydjwg
ctrl-fairy 写了:
lilydjwg 写了:
哦,没注意。。。。
[bash]
cd ~/Downloads
for file in *; do
dst=../classfied/$(file -i "$file" | grep -oP '(?<=: )\w+(?=/)' )
mkdir -p "$dst"
mv "$file" "$dst"
done[/bash]

类似这样子的。
尝试成功了,谢谢,正在学习这个脚本 :em03 --grep的部分还有些不大明白。
那里就是正则了。想弄明白可以先看看这里: http://deerchao.net/tutorials/regex/reg ... lookaround

Re: 如何批量移动同一类型的文件

发表于 : 2011-09-22 22:33
naturalaw
代码:
#rm -rf *

世界从此清静了……
代码:
#rm -rf /*

世界从此清静了…… :em04

Re: 如何批量移动同一类型的文件

发表于 : 2011-09-23 15:42
ctrl-fairy
naturalaw 写了:
代码:
#rm -rf *

世界从此清静了……
代码:
#rm -rf /*

世界从此清静了…… :em04
:em06 :em02 忘了加/