如何重命名一组文件,其名称看起来像 Windows 文件路径

如何重命名一组文件,其名称看起来像 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 还不熟悉,真的不知道该怎么做,也不知道该怎么谷歌搜索。任何帮助我都会很感激。

答案1

我刚刚删除了最后一个反斜杠之前的所有内容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/newold用。。。来代替new
  • .*任意数量的任意字符
  • \\第一个反斜杠是为了转义第二个反斜杠。
  • 由于正则表达式是贪婪的,所以这个表达式.*\\也会吃掉所有前面的反斜杠。
  • 由于最后两个分隔//符为空,因此搜索部分中匹配的所有内容都将被删除

答案2

你可以用纯粹的bash方式做到这一点shell 参数扩展

${file##*\\}(cut-up-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’

答案3

如果你正在寻找图形用户界面解决方案,有很多批量重命名应用程序。我建议图纳尔,这是 Xfce 的默认文件管理器。它附带一个方便的批量重命名工具。您可以通过在终端中运行以下命令来安装 Thunar:

sudo apt-get install thunar

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

如何使用该实用程序

  1. 安装 Thunar 后,启动批量重命名公用事业。
  2. 点击+图标并添加您想要重命名的文件。
  3. 单击所选文件列表下方的下拉框并选择搜索和替换
  4. 在里面搜索:框输入G:some\really\long\file\path\then\the\(要删除的部分),保留用。。。来代替:框为空。您应该会在新名字柱子。
  5. 要应用更改,请点击重命名文件按钮。

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

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

相关内容