如何使用名称中的Windows文件路径重命名一组文件

我收到了一堆乱七八糟的文件。 所有文件名都具有相同的开头,似乎是Windows文件目录。 问题是有700多个文件,我真的不想通过并手动重命名所有文件。 这些是文件名的示例(注意:这些都没有文件目录):

G:some\really\long\file\path\then\the\name1.jpg G:some\really\long\file\path\then\the\name2.png G:some\really\long\file\path\then\the\filename.txt G:some\really\long\file\path\then\the\file_name.mov ... 

重要的一点就是每个文件都有G:some\really\long\file\path\then\the\在我想要的文件名之前。

所以我希望上面的文件看起来像:

 name1.jpg name2.png filename.txt file_name.mov 

我尝试过rename命令并没有成功。 我仍然是Linux的新手,我真的不确定如何去做或谷歌。 任何帮助,将不胜感激。

我刚刚删除了所有内容, rename为最后一个反斜杠

 $ rename -n 's/.*\\//' G* rename(G:some\really\long\file\path\then\the\file_name.mov, file_name.mov) rename(G:some\really\long\file\path\then\the\filename.txt, filename.txt) rename(G:some\really\long\file\path\then\the\name1.jpg, name1.jpg) rename(G:some\really\long\file\path\then\the\name2.png, name2.png) 

在测试后删除-n以实际重命名文件。

笔记

  • -n不做任何事情,只打印将要更改的内容
  • s/old/news/old/new替换old
  • .*任意数量的任何字符
  • \\第一个反斜杠是逃避第二个。
  • 因为正则表达式是贪婪的这个表达式.*\\吃掉了前面所有的反斜杠。
  • 由于最后两个分隔符//为空,因此删除搜索部分中匹配的所有内容

您可以使用shell参数扩展在纯bash执行此操作。

${file##*\\} (cut-to-last-prefix)从文件名的开头到最后一个看到的所有内容都会被删除。

 for file in *; do mv -v "$file" "${file##*\\}"; done 

重命名结果是:

 'G:some\\really\\long\\file\\path\\then\\the\\file_name.mov' -> 'file_name.mov' 'G:some\\really\\long\\file\\path\\then\\the\\filename.txt' -> 'filename.txt' 'G:some\\really\\long\\file\\path\\then\\the\\name1.jpg' -> 'name1.jpg' 'G:some\\really\\long\\file\\path\\then\\the\\name2.png' -> 'name2.png' 

如果您正在寻找GUI解决方案,那么有许多批量重命名应用程序。 我建议Thunar ,这是Xfce的默认文件管理器。 它配备了一个方便的批量重命名工具。 您可以通过在终端中运行以下命令来安装Thunar:

 sudo apt-get install thunar 

您也许可以从Ubuntu软件安装。

如何使用该实用程序

  1. 安装Thunar后,启动批量重命名实用程序。
  2. 单击+图标并添加要重命名的文件。
  3. 单击所选文件列表下方的下拉框,然后选择“ 搜索和替换”
  4. 在“ 搜索:”框中输入G:some\really\long\file\path\then\the\ (要删除的部分),将“ 替换为:”框保留为空。 您应该在“ 新名称”列中看到更改的预览。
  5. 要应用更改,请单击“ 重命名文件”按钮。

除了搜索和替换此实用程序还支持以下操作:

  • 插入日期/时间
  • 插入/覆盖
  • 编号
  • 删除字符
  • 大写小写