2011-05-24 131 views
69

用bash添加文件扩展名“.jpg”到无扩展名文件的好方法是什么?用bash添加文件扩展名到文件

+1

'mv“$ {file}”“$ {file} .jpg”'? – 2011-05-24 16:57:43

+1

在你看来,什么是“扩展少文件”?这是一个名称中没有点的文件吗? – 2011-05-24 17:08:04

回答

81
for f in *.jpg; do mv "$f" "${f%.jpg}"; done 
for f in *; do mv "$f" "$f.jpg"; done 
+7

第二个非常适合重命名扩展文件!谢谢! – anon58192932 2014-09-09 03:33:22

+1

第二个为所有文件添加了扩展名,不仅扩展名为 – Jeff 2015-03-24 15:55:59

+5

,就像注释'“$ {f%.jpg}”'是bash shell字符串操作一样。 ' $ {string%substring}'从$ string后面删除$ substring的最短匹配。 – Jichao 2015-08-28 19:36:17

4
find . | while read FILE; do if [ $(file --mime-type -b "$FILE") == "image/jpeg" ]; then mv "$FILE" "$FILE".jpg; fi; done; 
38

您可以使用重命名:

rename 's/(.*)/$1.jpg/' * 
+1

您正在使用哪个版本的重命名?我有不同的参数:'重命名为文件...' – 2011-05-24 17:31:22

+1

重命名包含在perl中,它是版本5.10.1。 – 2011-05-24 17:58:44

+2

这与Ubuntu中包含的重命名(所以我猜所有基于Debian的发行版)的工作很好,比jm666的答案少得多。 – technicalbloke 2012-06-10 10:59:55

21

另一种方式 - 没有循环

find . -type f -not -name "*.*" -print0 |\ 
xargs -0 file |\ 
grep 'JPEG image data' |\ 
sed 's/:.*//' |\ 
xargs -I % echo mv % %.jpg 

击穿:

  • 找到不携带所有文件ension
  • 检查文件类型
  • 过滤出的JPG文件
  • 删除文件类型信息
  • xargs的运行 “MV” 为每个文件

上面的命令是空转的,之后你应该删除“回声”前mv

+0

你可以把它放到一个循环中,这个xargs是多余的。在这种情况下,我更喜欢Ryan的回答。 – Lucius 2011-05-24 19:51:33

+0

'xargs'岩石! :) – 2011-05-24 20:05:48

+1

@Lucius - 顺便说一句,这个问题想要“扩展名”的文件 - 所以瑞安应该只找到那些... – jm666 2011-05-24 20:12:46

-2

Ryan Li

的目录中添加文件扩展到多个文件的正确语法不具有文件扩展名是

find . | while read FILE; do if [[ -n `file --mime-type "$FILE" | grep 'message/rfc822'` ]]; then mv "$FILE" "$FILE".eml; fi; done; 
7

简单, cd到文件所在的文件目录和:

for f in *;do mv $f $f.jpg;done 
+0

出于某种原因,这适用于我,但Seth的解决方案不包含引号。 (OSX Mountain Lion bash) – delrocco 2016-12-18 14:36:45

+1

如果使用'for f in *; do mv“$ f”“$ f”.jpg; done“来支持文件名中的空格,会更好。 – Hritik 2017-06-22 17:09:59

-1
rename --dry-run * -a ".jpg" # test 
* -a ".jpg" # rename 
+0

'--dry-run'和'-a'在我的'rename'版本中不可用。如果这是特定于某个体系结构,那么应该指定它。 – 2017-04-09 09:59:57

5

预演:

rename -n s/$/.jpg/ * 

实际重命名:

rename s/$/.jpg/ *