重命名几个 gopro 文件

Rename several gopro files

我有这种结构的视频文件:GX**#### 其中 #### 是视频的编号。 但有时视频会分成 2 个或 3 个文件,例如:GX01####GX02#### 我的问题是,为了组织我的文件夹,我更喜欢像这样重命名它们:GX####-1GX####-2.

所以我问你一个问题,我是否可以创建一个 script/command 来自动重命名我的文件来执行此操作?我可以使用 .bat windows 文件或 .sh linux 文件。我的主要问题是我不知道简单地重命名文件的命令(我看到许多重写整个文件的解决方案)。可能是如果你知道这一点我就可以完成我的脚本了。

提前致谢。

您可以回显原始文件名和新文件名:

for f in GX*; do
    echo "$f" $(sed 's/^GX\(..\)\(.*\)/GX-/' <<< "$f")
done

应该输出:

GX01#### GX####-01
GX02#### GX####-02

然后使用 mv -n 而不是 echo 来重命名文件。

您可以遍历文件并使用 PE 参数扩展对字符串进行切片和打乱,并使用 mv 重命名文件。

这是一个示例,首先让我们使用 touch 创建一个空文件,但首先我们需要创建一个新目录(您称之为文件夹)并使用 mkdir 和 cd 进入新创建的目录。

mkdir newdirectory && cd newdirectory 

现在使用 touch 创建空文件。

touch GX01#### GX02#### GX03#### GX04####

现在使用 ls

检查空文件
ls *

输出应该像

GX01####  GX02####  GX03####  GX04####

现在我们已经创建了空文件,现在可以进行重命名部分了。

for file in GX*; do
  file1="${file#*??}"
  file2=${file1#*??}
  file3=${file1%*$file2}
  echo mv -v "$file" "${file%*$file1}${file2}"-"$file3"
done

由于回声,输出应该在标准输出(这是您的屏幕)上。

mv -v GX01#### GX####-01
mv -v GX02#### GX####-02
mv -v GX03#### GX####-03
mv -v GX04#### GX####-04

如果您对所看到的内容感到满意,请删除 echo,以便 mv 实际上可以重命名文件。为了展示切片是如何完成的,这里有一个例子。

file=GX01####
file1="${file#*??}"
file2=${file1#*??}
file3="${file1%*$file2}"
printf '%s\n' "$file1" "$file2" "$file3"

输出应该是这样的。

01####
####
01

? 表示来自 shell.

的单个字符串

请注意,请备份您要编辑的文件,以防 shell 在您重命名文件时出错。 :-)

你也应该使用 shell globing 像 nullglob see

http://mywiki.wooledge.org/glob#nullglob

参见 man bash 并查找参数扩展。

PAGER='less +/^[[:space:]]*parameter\ expansion' man bash

一些在线资源,有详细的解释和例子。

http://mywiki.wooledge.org/BashFAQ/073

https://wiki.bash-hackers.org/syntax/pe