Answers:
如果你的外壳支持 括号扩展(可与csh
,tcsh
,ksh
,zsh
,bash
,mksh
,lksh
,pdksh
,yash
用括号展开致电启用yash --brace-expand
或交互shell设置set -o brace-expand
,或fish
):
mv ~/folder/subfolder/file.{txt,sh}
rename
。
rename
更好的解决方案,因为rename
永远不要要求您覆盖现有文件。
{a,b}
功能要好得多。
rename
是完全不同的基于Perl的程序。在那里,您将使用rename 's/txt$/sh/' ~/folder/subfolder/file.txt
。
mmv
。
以上所有都很好。这也可以工作:
( cd ~/folder/subfolder && mv file.txt file.sh )
sudo
零件,它将起作用。
sudo
?
sudo
它被解释~
为根目录的主目录。
sudo
在mv
,但不是cd
。了解为什么CD是建在一个外壳,你不能。sudo
在(
否。您需要提供文件的完整路径才能重命名。唯一的选择是在运行以下命令之前移到目标文件夹mv
:
cd ~/folder/subfolder/
mv file.txt file.sh
或者,您可以编写一个小函数来重命名目标目录中的文件。例如,将这些行添加到您的shell初始化文件中(~/.bashrc
如果使用bash
):
lmv(){
_path=$(dirname -- "$1")
_target="${_path%/}/$2"
mv -- "$1" "$_target"
}
然后,打开一个新的终端或运行source ~/.bashrc
以重新读取init文件,您可以执行以下操作:
lmv ~/folder/subfolder/file.txt file.sh
lmv()
功能。我不知道:)
只是为了扩大cuonglm答案的有用性(我不喜欢他的解决方案,所以请不要功劳),而他的答案是正确的。
用例是我们经常想在一个远程位置上移动文件(真正的问题),例如/folder/subfolder/configFile.dat TO configFile.dat.orig
此命令形式添加文件扩展名(不替换原始扩展名)
mv ~/folder/subfolder/file.txt{,.orig}
解释:“ {,. orig}”表示将文件名末尾的“ nothing”替换为“ .orig”。
或删除文件扩展名(反向重命名)
mv ~/folder/subfolder/file.txt{.orig,}
注意:仍是“无需重命名目录路径即可重命名文件的最快方法”的主题
是。如果使用bash
,就可以sudo pushd ~/folder/subfolder/ && sudo mv ./file.txt ./file.sh && popd
。
这实际上更大,并且如果您在执行时失去了对原始目录的访问权限,则可能会失败popd
。
pushd
和popd
这里?有什么比这更好的cd ~/folder/subfolder/ && sudo mv file.txt file.sh
呢?
pushd
popd
是使用cd
并返回cd -
。
popd
比cd ../../
可用时要好。
(cd /path/to/there && mv x y)
然后使用(带有子壳)
sudo
前面pushd
。因此完整的命令应该是pushd ...dir && sudo mv old new && popd
。作为替代方案,可以这样做(cd ...dir; sudo mv old new)
是因为在subshell中运行将自动处理目录更改。