如何一次重命名多个具有不同名称的文件?

时间:2019-03-28 22:32:59

标签: linux shell awk sed

我有几个docx文件(大约250个文件),每个文件都有不同的名称。我需要重命名所有这些文件,以便结果必须是每个文件名必须是前一个文件的连续数字,如下所示:

1.docx-2.docx-3.docx -等等

如何在Linux中使用命令行来做到这一点?

我最大的问题是每个文件都有一个完全不可读的名称。

例如:

ÄÿÇäÄùàÄàÜÄæÆëÜÖÆà.docx

因为这些文件最初是用希伯来语命名的,所以当提取zip文件时,这些文件的名称就变得难以辨认。

3 个答案:

答案 0 :(得分:1)

这可能对您有用(GNU并行):

parallel --dry-run mv -v ::: *.docx :::+ {1..300}.docx

这将打印命令以将所有以.docx结尾的文件重命名为连续的数字,最多300个。

要实际运行命令(检查后),请删除--dry-run选项。

答案 1 :(得分:1)

这可能有效:

parallel mv -- {} {#}.docx ::: *.docx

答案 2 :(得分:0)

尝试:

count=0; for f in *.docx; do mv -i -- "$f" "$((count=count+1)).docx"; done

如果有一个原始文件实际上是用一个简单的数字命名的,例如3.docx,那么在将文件重命名的同时将它们移动到其他目录会更安全。 :

count=0; for f in *.docx; do mv -i -- "$f" "some/other/dir/$((count=count+1)).docx"; done

工作原理

  • count=0

    这会将变量count初始化为零。

  • for f in *.docx; do

    这将开始循环,依次将f分配给每个docx文件的名称。

  • mv -i -- "$f" "some/other/dir/$((count=count+1)).docx"

    这将重命名/移动文件。 $((count=count+1))告诉shell每次增加count

    在bash下,$((count=count+1))可以简化为$((++count))

  • done

    这表明循环结束。