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

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
ctrl-fairy
帖子: 116
注册时间: 2011-04-28 18:05

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

#1

帖子 ctrl-fairy » 2011-09-22 17:00

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

代码: 全选

linux和windows对我等菜鸟,都是浮云!
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

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

#2

帖子 lilydjwg » 2011-09-22 17:24

[bash]
cd ~/Downloads
for file in *; do
dst=../classfied/${file##*.}
mkdir -p "$dst"
mv "$file" "$dst"
done
[/bash]
未测试,出事自理。
sk1418
帖子: 229
注册时间: 2007-07-01 17:36
系统: (En):System
来自: (En):address
联系:

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

#3

帖子 sk1418 » 2011-09-22 17:46

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

Kent
sk1418
帖子: 229
注册时间: 2007-07-01 17:36
系统: (En):System
来自: (En):address
联系:

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

#4

帖子 sk1418 » 2011-09-22 17:49

lz我觉得,你不如写个脚本,里面就是按你要求罗列的几个find

代码: 全选

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

Kent
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

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

#5

帖子 lilydjwg » 2011-09-22 18:20

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]

类似这样子的。
sk1418
帖子: 229
注册时间: 2007-07-01 17:36
系统: (En):System
来自: (En):address
联系:

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

#6

帖子 sk1418 » 2011-09-22 19:19

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省事呢。
---
regards,

Kent
头像
ctrl-fairy
帖子: 116
注册时间: 2011-04-28 18:05

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

#7

帖子 ctrl-fairy » 2011-09-22 20:59

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的部分还有些不大明白。

代码: 全选

linux和windows对我等菜鸟,都是浮云!
头像
ctrl-fairy
帖子: 116
注册时间: 2011-04-28 18:05

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

#8

帖子 ctrl-fairy » 2011-09-22 21:03

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 。谢谢了,的确是好的,不过有时有些太繁琐,我还是尝试结合看看。

代码: 全选

linux和windows对我等菜鸟,都是浮云!
头像
naturalaw
帖子: 1360
注册时间: 2011-09-06 22:04

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

#9

帖子 naturalaw » 2011-09-22 21:06

写个脚本嘛.

代码: 全选

if ;then
elif ;then
...
fi
or

代码: 全选

case.
  • The eternal law
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

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

#10

帖子 lilydjwg » 2011-09-22 22:24

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
头像
naturalaw
帖子: 1360
注册时间: 2011-09-06 22:04

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

#11

帖子 naturalaw » 2011-09-22 22:33

代码:
#rm -rf *

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

世界从此清静了…… :em04
  • The eternal law
头像
ctrl-fairy
帖子: 116
注册时间: 2011-04-28 18:05

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

#12

帖子 ctrl-fairy » 2011-09-23 15:42

naturalaw 写了:
代码:
#rm -rf *

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

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

代码: 全选

linux和windows对我等菜鸟,都是浮云!
回复