使用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

results matching ""

    No results matching ""