我有具有以下结构的视频文件:GX**####,其中####是视频的编号。但有时视频被分割成两个或三个文件,例如:GX01####和GX02####,我的问题是,为了组织我的文件夹,我更喜欢把它们重命名为:GX####-1和GX####-2。
那么,我问您一个问题,我是否可以创建一个脚本/命令来自动重命名我的文件来完成这个任务?我可以使用.bat窗口文件或.sh linux文件。我的主要问题是,我不知道简单地重命名文件的命令(我看到了许多重写整个文件的解决方案)。如果你只知道这个,我就能完成我的剧本了。
提前谢谢你。
发布于 2020-01-13 01:53:26
您可以循环遍历文件,并使用PE参数展开对字符串进行切片和混叠,并使用mv重命名文件。
下面是一个示例,首先让我们使用触摸创建一个空文件,但首先我们需要创建一个新目录(您称之为文件夹),然后使用mkdir和cd进入新创建的目录。
mkdir newdirectory && cd newdirectory 现在使用触摸创建空文件。
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输出应该在stdout (这是您的屏幕),因为回声。
mv -v GX01#### GX####-01
mv -v GX02#### GX####-02
mv -v GX03#### GX####-03
mv -v GX04#### GX####-04如果您对所看到的内容感到满意,那么删除回波,这样mv实际上可以重命名文件。这里展示了切片是如何完成的,这就是一个例子。
file=GX01####
file1="${file#*??}"
file2=${file1#*??}
file3="${file1%*$file2}"
printf '%s\n' "$file1" "$file2" "$file3"输出应该类似于。
01####
####
01表示来自shell的单个字符串。
一个警告和建议,备份您想要编辑的文件,以防shell在重命名文件时出错。:-)
另外,您可能应该使用shell全局化,如nullglob (请参阅
http://mywiki.wooledge.org/glob#nullglob
请参阅man并查找参数展开。
PAGER='less +/^[[:space:]]*parameter\ expansion' man bash一些在线资源,有详细的解释和例子。
http://mywiki.wooledge.org/BashFAQ/073
发布于 2020-01-12 22:55:22
您可以回显原始文件名和新文件名:
for f in GX*; do
echo "$f" $(sed 's/^GX\(..\)\(.*\)/GX\2-\1/' <<< "$f")
done哪一项应产出:
GX01#### GX####-01
GX02#### GX####-02然后使用mv -n而不是echo来重命名文件。
https://stackoverflow.com/questions/59708360
复制相似问题