我有一大堆像这样的文件:
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"