【发布时间】:2015-03-21 11:53:45
【问题描述】:
我想将我的文件从 myscript.js 重命名为 .myscript.js。我怎样才能用 bash 做到这一点?我尝试了不同的选项,例如mv myscript.js \.*,但它不起作用。我尝试通过添加非点符号来进行实验 - mv myscript.js m*,但现在我什至不知道我的文件在哪里(当然,我有一个副本;)。
【问题讨论】:
标签: bash file-rename
我想将我的文件从 myscript.js 重命名为 .myscript.js。我怎样才能用 bash 做到这一点?我尝试了不同的选项,例如mv myscript.js \.*,但它不起作用。我尝试通过添加非点符号来进行实验 - mv myscript.js m*,但现在我什至不知道我的文件在哪里(当然,我有一个副本;)。
【问题讨论】:
标签: bash file-rename
你太努力了。
mv myscript.js .myscript.js
【讨论】:
大括号扩展
mv {,.}myscript.js
【讨论】:
您可以使用rename 实用程序重命名所有*.js 文件,方法是在它们之前放置一个点:
rename 's/(.+\.js)/.$1/' *.js
或者在纯 BASH 中使用这个 for 循环:
for i in *.js; do mv "$i" ".$i"; done
【讨论】:
不要将模式用作mv(或cp)的目标。在大多数情况下,该命令不会执行您想要或期望的操作:Bash 将在您运行命令时扩展模式,使用文件名在执行命令之前 .所以.* 不匹配任何内容(因为文件还不存在),m* 将匹配任何以m 开头的文件或文件夹。由于您没有收到错误,因此最后一个匹配项很可能是一个文件夹。
无法访问当前命令的前一个参数。如果您想避免输入过多,请使用 Tab 作为两个文件名(因此您最终会得到 mv myscript.js myscript.js),然后使用 Ctrl+Left 和 Ctrl+Right 快速移动到第二个参数的开头插入缺少的.。
不过,您可以访问parameters of the previous command。但这不是 BASH 的特性——它是 readline 的特性。
【讨论】: