使用bash为文件添加文件扩展名

Adr*_*ian 84 linux bash

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

Set*_*son 103

for f in *.jpg; do mv "$f" "${f%.jpg}"; done
for f in *; do mv "$f" "$f.jpg"; done
Run Code Online (Sandbox Code Playgroud)

  • 第二个是完美的重命名无扩展文件!谢谢! (8认同)
  • 就像一个注释`"$ {f%.jpg}"`是bash shell字符串操作.`$ {string%substring}`从$ string后面删除$ substring的最短匹配. (5认同)
  • 第二个是在所有文件上添加扩展名,而不仅仅是无扩展名 (2认同)
  • 警告:如果您有一个具有混合扩展名的文件夹,请注意上面的内容甚至会将“.jpg”添加到普通文件中。 (2认同)

Kim*_*bel 57

您可以使用重命名:

rename 's/(.*)/$1.jpg/' *
Run Code Online (Sandbox Code Playgroud)

  • 您使用的是哪个版本的重命名?我有不同的论点:`重命名为文件......` (3认同)
  • 这适用于Ubuntu中包含的重命名(所以我猜所有基于Debian的发行版),比jm666的答案简单得多. (3认同)

jm6*_*666 25

另一种方式 - 没有循环

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

分解:

  • 找到没有扩展名的所有文件
  • 检查文件类型
  • 仅过滤掉JPG文件
  • 删除文件类型信息
  • xargs为每个文件运行"mv"

以上命令用于干运行,之后你应该删除mv之前的"echo"


bha*_*ath 20

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

for f in *;do mv $f $f.jpg;done
Run Code Online (Sandbox Code Playgroud)

  • 如果使用`for f in*; do mv"$ f""$ f".jpg; done`来支持文件名中的空格会更好. (4认同)

Ale*_*xey 11

干运行:

 rename -n s/$/.jpg/ *
Run Code Online (Sandbox Code Playgroud)

实际重命名:

 rename s/$/.jpg/ *
Run Code Online (Sandbox Code Playgroud)


Rya*_* Li 5

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