使用AWK和XARGS为文件批量改名

    科技2024-11-12  12

    需求

    现在文件下有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 这样的格式。

    实现方法

    我们只需要使用以下命令即可实现。 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

    实现说明

    这个命令很长, 分为以下几步:

    第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

    Processed: 0.112, SQL: 8