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

Ham*_*ava 58 rename mv

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

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

     ^-------this part------^    ^------this part-------^
Run Code Online (Sandbox Code Playgroud)

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

有没有更快的方法?

cuo*_*glm 109

如果您的 shell支持 Brace Expansion(与csh, tcsh, ksh, zsh, bash, mksh, lksh, pdksh,yash一起使用,通过在交互式 shell 中使用, 或调用或设置启用大括号扩展):yash --brace-expandset -o brace-expandfish

mv ~/folder/subfolder/file.{txt,sh}
Run Code Online (Sandbox Code Playgroud)

  • 简单就是最好的! (4认同)
  • @tohecz:为什么神秘?这是 shell 的一项功能,每个人都可以通过阅读 shell 手册页了解它。而且我不认为 `rename` 是更好的解决方案,因为 `rename` 从不要求您覆盖现有文件。 (4认同)
  • 它 _is_ 很棒,但真的很神秘。它有效,但乍一看我认为它做了一些不同的事情:将两个文件移动到某个地方。我认为这不是一个好主意,尤其是因为使用 `rename` 有更好的解决方案。 (3认同)
  • 扩展在shell中的使用很棒! (2认同)

jof*_*fel 23

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

rename .txt .sh ~/folder/subfolder/file.txt
Run Code Online (Sandbox Code Playgroud)

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

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

小智 10

以上都是好的。这也可以:

( cd ~/folder/subfolder && mv file.txt file.sh )
Run Code Online (Sandbox Code Playgroud)

  • @HamedKamrava 可能是因为使用 `sudo` 它将 `~` 解释为根目录的主目录。 (2认同)

ter*_*don 8

不可以。您需要提供文件的完整路径才能重命名它。唯一的选择是在运行之前移动到目标文件夹mv

cd ~/folder/subfolder/
mv file.txt file.sh
Run Code Online (Sandbox Code Playgroud)

或者,您可以编写一个小函数来重命名目标目录中的文件。例如,将这些行添加到您的 shell 初始化文件(~/.bashrc如果您正在使用bash):

lmv(){
    _path=$(dirname -- "$1")
    _target="${_path%/}/$2"
    mv -- "$1" "$_target"
}
Run Code Online (Sandbox Code Playgroud)

然后,打开一个新终端或只是运行source ~/.bashrc以重新读取 init 文件,您可以执行以下操作:

lmv ~/folder/subfolder/file.txt file.sh
Run Code Online (Sandbox Code Playgroud)

  • 我知道。我的意思是我不知道我可以编写自己的函数! (2认同)