重命名文件的最快方法,而无需重新键入目录路径


56

我知道如何在Unix中重命名文件:

$ mv ~/folder/subfolder/file.txt ~/folder/subfolder/file.sh

     ^-------this part------^    ^------this part-------^

重复~/folder/subfolder/file两次需要很长时间。

有没有更快的方法?

Answers:


104

如果你的外壳支持 括号扩展(可与cshtcshkshzshbashmkshlkshpdkshyash括号展开致电启用yash --brace-expand或交互shell设置set -o brace-expand,或fish):

mv ~/folder/subfolder/file.{txt,sh}

4
简单就是最好!
Braiam

2
极好的使用扩展壳中的辉煌!
harish.venkat 2014年

3
真棒,但真正的神秘。它可以工作,但是乍一看,我认为它会做一些不同的事情:将两个文件移到某个位置。我认为这不是一个好主意,特别是因为使用会有更好的解决方案rename
哟”

4
@tohecz:为什么它是神秘的?它是shell的功能,每个人都可以通过阅读shell手册页来了解它。而且我认为这不是rename更好的解决方案,因为rename永远不要要求您覆盖现有文件。
cuonglm

1
@Gnouc,你是男人。
beginer

20

您也可以使用rename(util-linux软件包的一部分)。

rename .txt .sh ~/folder/subfolder/file.txt

有关更多详细信息,请参见重命名手册页


+1这是一种清晰的方法,比依靠shell {a,b}功能要好得多。
哟”

5
在某些Linux发行版(例如Ubuntu)中,rename是完全不同的基于Perl的程序。在那里,您将使用rename 's/txt$/sh/' ~/folder/subfolder/file.txt
evilsoup 2014年

在Debian(和Ubuntu)上,也有mmv
ctrl-alt-delor

10

以上所有都很好。这也可以工作:

( cd ~/folder/subfolder && mv file.txt file.sh )

不,这对我不起作用!
Hamed Kamrava 2014年

如果您删除sudo零件,它将起作用。
克苏鲁2014年

1
@Cthulhu是的,您的权利。但是为什么不起作用sudo
Hamed Kamrava 2014年

2
@HamedKamrava可能是因为sudo它被解释~为根目录的主目录。
克苏鲁2014年

你可以sudomv,但不是cd。了解为什么CD是建在一个外壳,你不能。sudo(
CTRL-ALT-delor

6

否。您需要提供文件的完整路径才能重命名。唯一的选择是在运行以下命令之前移到目标文件夹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

+1为lmv()功能。我不知道:)
Hamed Kamrava 2014年

1
@HamedKamrava没有人知道。我只是写了,这不是什么标准。
terdon

2
我知道。我的意思是我不知道我可以编写自己的函数!
Hamed Kamrava 2014年

2

只是为了扩大cuonglm答案的有用性(我不喜欢他的解决方案,所以请不要功劳),而他的答案是正确的。

用例是我们经常想在一个远程位置上移动文件(真正的问题),例如/folder/subfolder/configFile.dat TO configFile.dat.orig

此命令形式添加文件扩展名(不替换原始扩展名)

mv ~/folder/subfolder/file.txt{,.orig}

解释:“ {,. orig}”表示将文件名末尾的“ nothing”替换为“ .orig”。

删除文件扩展名(反向重命名)

mv ~/folder/subfolder/file.txt{.orig,}

注意:仍是“无需重命名目录路径即可重命名文件的最快方法”的主题


1

是。如果使用bash,就可以sudo pushd ~/folder/subfolder/ && sudo mv ./file.txt ./file.sh && popd

这实际上更大,并且如果您在执行时失去了对原始目录的访问权限,则可能会失败popd


1
什么是点pushdpopd这里?有什么比这更好的cd ~/folder/subfolder/ && sudo mv file.txt file.sh呢?
terdon

1
关键是,命令后您将返回到您启动的文件夹中,而不是任何子文件夹中。的替代方法pushd popd是使用cd并返回cd -
jofel 2014年

发问者似乎打算不更改工作目录,并且popdcd ../../可用时要好。
1754年

7
(cd /path/to/there && mv x y)然后使用(带有子壳)
斯特凡·查泽拉斯

你真的不应该放在sudo前面pushd。因此完整的命令应该是pushd ...dir && sudo mv old new && popd。作为替代方案,可以这样做(cd ...dir; sudo mv old new)是因为在subshel​​l中运行将自动处理目录更改。
Mikko Rantalainen
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.