重命名几个 gopro 文件
Rename several gopro files
我有这种结构的视频文件:GX**####
其中 ####
是视频的编号。
但有时视频会分成 2 个或 3 个文件,例如:GX01####
和 GX02####
我的问题是,为了组织我的文件夹,我更喜欢像这样重命名它们:GX####-1
和 GX####-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
一些在线资源,有详细的解释和例子。
我有这种结构的视频文件:GX**####
其中 ####
是视频的编号。
但有时视频会分成 2 个或 3 个文件,例如:GX01####
和 GX02####
我的问题是,为了组织我的文件夹,我更喜欢像这样重命名它们:GX####-1
和 GX####-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
一些在线资源,有详细的解释和例子。