当涉及空格时如何通过 CLI 重命名一批文件

当涉及空格时如何通过 CLI 重命名一批文件

我有一大堆像这样的文件:

x54y65.dat

我想在它们前面加上一个特定的短语,使它们看起来像这样:

some prefix - x54y65.dat

连字符后面的空格让我困惑。

我试过:

 mv * some\ prefix\ -\ *

但没用。我该怎么做?谢谢

答案1

虽然原作者的回答是正确的,但我认为最好解释一下为什么mv问题中列出的命令不起作用。

问题在于对 Unix shell 工作方式的基本误解 --- 与 DOS 命令行完全不同。选择多个文件的特殊字符(*、? 等)(它们称为“glob”)在 shell 级别而不是命令级别起作用。因此,shell 将第一个命令扩展为

mv x54y56.dat x57y58.dat x59y60.dat "some prefix - *"

为了简单起见,我假设目录中只有这三个文件,并且没有与"some prefix - "模式名称匹配的文件 --- 因此 shell 可能会让它保持原样。(我使用引号来嵌入空格,我发现它比反斜杠更容易阅读,尽管详细信息在您的 shell 手册中)。

现在,mv a b c d将尝试将文件a、、b移动c到目录d,但失败---因为d不存在。

rename如果你有命令,那么解决方案就是rename正确的。正如 OP 发现的那样,

rename 's//some prefix - /' *.dat

工作正常。在过去的好日子里,你应该做什么

for i in *.dat; do
  mv "$i" "some prefix - $i"
done

每次只做一个动作。

答案2

rename 's//some prefix - /' *.dat

它使用正则表达式类型的语法在一行中重命名具有指定扩展名 (.dat) 的所有文件。它可以轻松处理空格,因为它接受由 / 封装的任何字符

答案3

mv x54y65.dat "some prefix - x54y65.dat"

相关内容