使用AWK和XARGS为文件批量改名 郝伟 2020/10/07
[TOC]
1. 需求
现在文件下有N个视频文件,名称如下所示:
hao@Hao-Hasee:/mnt/d/BaiduDownloads$ ls -lsh
total 14G
1.7G -rwxrwxrwx 1 hao hao 1.7G Oct 7 18:32 医.2014.03.mkv
1.7G -rwxrwxrwx 1 hao hao 1.7G Oct 7 18:36 医.2014.04.mkv
1.7G -rwxrwxrwx 1 hao hao 1.7G Oct 7 19:08 医.2014.05.mkv
1.7G -rwxrwxrwx 1 hao hao 1.7G Oct 7 19:03 医.2014.06.mkv
1.7G -rwxrwxrwx 1 hao hao 1.7G Oct 7 19:03 医.2014.07.mkv
1.7G -rwxrwxrwx 1 hao hao 1.7G Oct 7 19:03 医.2014.08.mkv
1.7G -rwxrwxrwx 1 hao hao 1.7G Oct 7 19:03 医.2014.09.mkv
1.7G -rwxrwxrwx 1 hao hao 1.7G Oct 7 19:03 医.2014.10.mkv
现在希望把这个文件全部命名为 S01E01
这样的格式。
2. 实现方法
我们只需要使用以下命令即可实现。
ls 医* -lsh | awk '{print $NF}' | awk -F. '{print $3}' | xargs -I {} mv 医.2014.{}.mkv S01E{}.mkv
结果
hao@Hao-Hasee:/mnt/d/BaiduDownloads$ ls 医* -lsh | awk '{print $NF}' | awk -F. '{print $3}' | xargs -I {} mv 医.2014.{}.mkv S01E{}.mkv
hao@Hao-Hasee:/mnt/d/BaiduDownloads$ ls -lsh
total 14G
1.7G -rwxrwxrwx 1 hao hao 1.7G Oct 7 18:32 S01E03.mkv
1.7G -rwxrwxrwx 1 hao hao 1.7G Oct 7 18:36 S01E04.mkv
1.7G -rwxrwxrwx 1 hao hao 1.7G Oct 7 19:08 S01E05.mkv
1.7G -rwxrwxrwx 1 hao hao 1.7G Oct 7 19:03 S01E06.mkv
1.7G -rwxrwxrwx 1 hao hao 1.7G Oct 7 19:03 S01E07.mkv
1.7G -rwxrwxrwx 1 hao hao 1.7G Oct 7 19:03 S01E08.mkv
1.7G -rwxrwxrwx 1 hao hao 1.7G Oct 7 19:03 S01E09.mkv
1.7G -rwxrwxrwx 1 hao hao 1.7G Oct 7 19:03 S01E10.mkv
3. 实现说明
这个命令很长, 分为以下几步:
- 第1步
ls 医* -lsh
列出文件名并以行列出,比如1.7G -rwxrwxrwx 1 hao hao 1.7G Oct 7 18:32 医.2014.03.mkv
; - 第2步
awk '{print $NF}'
获得文件名,比如医.2014.03.mkv
; - 第3步
awk -F. '{print $3}'
获得文件集号,比如03
- 第4步
xargs -I {} mv 医.2014.{}.mkv S01E{}.mkv
生成更名命令并执行,比如mv 医.2014.03.mkv S01E03.mkv
经过以上4次管道,最终达到预期的目标。实际上第1,2步可以使得参数合并成一步:
hao@Hao-Hasee:/mnt/d/BaiduDownloads$ ls -1 医*
医.2014.03.mkv
医.2014.04.mkv
医.2014.05.mkv
医.2014.06.mkv
医.2014.07.mkv
医.2014.08.mkv
医.2014.09.mkv
医.2014.10.mkv
此时整个命令变为 ls -1 医* | awk -F. '{print $3}' | xargs -I {} mv 医.2014.{}.mkv S01E{}.mkv