我可以在 macOS 上使用终端命令“mv”移动多个文件吗?

Posted

技术标签:

【中文标题】我可以在 macOS 上使用终端命令“mv”移动多个文件吗?【英文标题】:Could I move several files with terminal command "mv" on macOS? 【发布时间】:2019-09-10 16:24:22 【问题描述】:

当我尝试移动多个文件时,我遇到了这个问题。我有 3 个文件需要在不放置子文件夹的情况下移动。

这些文件的名称很长,这使任务更加困难。

例子:

Lógica_matemática_para_ingeniería_de_sistemas_y_co..._----_(Pg_81--102).pdf
Lógica_matemática_para_ingeniería_de_sistemas_y_co..._----_(Pg_103--122).pdf
Lógica_matemática_para_ingeniería_de_sistemas_y_co..._----_(Pg_123--155).pdf

如何在终端解决这个问题?

我将不胜感激。

【问题讨论】:

“需要移动而不放置子文件夹”是什么意思?您能否编辑您的问题以显示移动操作的预期结果以及您已经尝试过的内容? 【参考方案1】:

如果你只是想在命令行中简化长文件名的输入,在 bash 中你可以使用 tab 键来简化输入。例如输入命令的开头,例如mv L 然后点击 tab 键,它会自动完成直到名称不明确(例如直到页码)。自动完成功能让输入这些名称变得非常容易。

如果你想重命名一堆文件,一个常见的技巧是

使用ls 获取相关文件列表并使用sed 构建用于重命名这些文件的脚本,例如:

$ ls L* | sed 's/^[^0-9]*\([0-9]*\)--\([0-9]*\)).pdf/mv "&" Pages\1-\2.pdf /'

查找不是数字​​的字符串,然后获取-- 前后的数字,然后输出字符串mv,后跟原始名称,后跟包含页码的新名称。我知道这有点麻烦,但这是正则表达式的力量。这实际上并没有进行重命名,而是创建了可以在您选择时进行重命名的命令。

无论如何,这会产生如下文本输出:

mv "Lógica_matemática_para_ingeniería_de_sistemas_y_co..._----_(Pg_103--122).pdf" Pages103-122.pdf mv "Lógica_matemática_para_ingeniería_de_sistemas_y_co..._----_(Pg_123--155).pdf" Pages123-155.pdf mv "Lógica_matemática_para_ingeniería_de_sistemas_y_co..._----_(Pg_81--102).pdf" Pages81-102.pdf

如果您想了解丰富的可用替代方案,您可以在 Google 上搜索 sedtutorials/examples。而且,如果它变得非常复杂,还有其他选择,包括 awk 和/或 shell 脚本。

无论如何,一旦您目视检查并确定生成的 mv 命令看起来不错,您可以重复该过程,这次将输出传送到 sh 以实际执行重命名:

$ ls L* | sed 's/^[^0-9]*\([0-9]*\)--\([0-9]*\)).pdf/mv "&" Pages\1-\2.pdf /' |嘘

您可以安装其他文件重命名实用程序,但老派 Unix 人通常会让 sed 为我们完成该过程。

【讨论】:

谢谢你的回答,太好了。 sed 非常强大。 如果我回答了您的问题,您可以考虑点击答案旁边的复选标记以接受它。见What should I do when someone answers my question?

以上是关于我可以在 macOS 上使用终端命令“mv”移动多个文件吗?的主要内容,如果未能解决你的问题,请参考以下文章

在终端 MacOS 上运行 ffmpeg [关闭]

mac终端命令及快捷键

FileSystemWatcher不会使用'mv'命令检测移动到目录中的文件,也不会在ubuntu上剪切和粘贴

终端命令 mac

如何在 macOS 上通过命令隐藏终端窗口

MacOS 常用终端命令大全