重命名本地文件夹中的文件添加前缀或后缀

重命名本地文件夹中的文件添加前缀或后缀

我的文件夹中有很多文件,我想添加前缀或后缀(不是两个都) 给他们。我检查了这里发现我可以使用

for filename in *.jpg; do mv "$filename" "prefix_$filename"; done;

为所有以 结尾的文件添加前缀.jpg(如果我删除.jpg,它会将前缀添加到当前文件夹中的所有文件)。

但是,我希望能够

  • 添加后缀(即重命名filename.extfilename.whatever.ext),
  • 检查前缀或后缀是否已经存在然后跳过,
  • 创建一个接受参数的别名,例如addprefix whatever *.extaddsufix whatever *.*

答案1

如果您正在使用bash,那么这个单行代码可以为您完成(假设您有变量$prefix$suffix并且$extension随时可用)

mv "$filename" "$prefix${filename%.$extension}$suffix.$extension"

你可以让你的脚本像这样

#!/bin/bash
# Usage: addprefix <prefix> <files>

prefix=$1
shift
for f in "$@"
do
  mv "$f" "$prefix$f"
done

#!/bin/bash
# addsuffix <suffix> <files>

suffix=$1
shift
for f in "$@"
do
  extension=${f##*.}
  if [ -z $extension ]; then
    mv "$f" "$f$suffix"
  else
    mv "$f" "${f%.$extension}$suffix.$extension"
  fi
done

答案2

有一个Perlrename命令这应该够了吧。但请注意:有多个不同的命令称为rename,因此请确保您拥有需要 aperlexpr作为其参数的 Perl 脚本。这是Debian 及其衍生版本(Ubuntu、Mint 等)上的软件包rename提供的命令,但其他发行版上则没有,这些发行版可能具有名为 的不同实用程序。perlrename

martin@martin ~/test % touch a.txt
martin@martin ~/test % touch b.txt
martin@martin ~/test % rename 's/^(prefix)?/prefix/' *.txt
martin@martin ~/test % ll
insgesamt 0
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixa.txt
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixb.txt
martin@martin ~/test % rename 's/^(prefix)?/prefix/' *.txt
martin@martin ~/test % ll
insgesamt 0
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixa.txt
-rw-rw-r-- 1 martin martin 0 Sep 19 23:56 prefixb.txt

正如你所看到的,它是幂等的- 多次调用时不会再次添加前缀。

它的工作原理是替换字符串的(零长度)开头 ( ^) 或将开头后跟可选prefix字符串替换为prefix

我将把它封装在 shell 脚本或 shell 函数中作为您的练习:)

不过 Postfix 有点难,因为你必须弄清楚文件名的哪一部分构成扩展名......

答案3

zsh

autoload zmv # in ~/.zshrc
zmv '(*~*suffix).ext' '${1}suffix.ext'

~是通配符,这意味着除了zsh

答案4

更改当前文件夹中所有图像的前缀和扩展名的简单示例。

prefix=EG_
extension=.jpg
for i in $(ls); do mv $i "$prefix${i%.JPG}$extension";  done

如果您想在更改之前检查它如何影响您的数据,请替换MV经过回声

IMG_7993.JPG 的输出是 EG_IMG_7993.jpg

相关内容