Linux 中长名称的 mv 文件

Linux 中长名称的 mv 文件

在 Linux 中我有时会像这样重命名文件:

mv dir1/dir2/dir3/file.txt  dir1/dir2/dir3/file.txt.old

请注意,我只是想重命名该文件,而不是将其移动到另一个目录。

是否有命令可以让我执行该命令的简写版本?我正在考虑类似的事情:

mv dir1/dir2/dir3/file.txt  file.txt.old

或者甚至类似于(仅附加到名称):

mv dir1/dir2/dir3/file.txt  {}.old

我的目标是不必再次指定完整路径。

我知道我写的那些“例子”不起作用,但这只是我想要实现的一个想法。

我不想必须通过 cd 进入该目录。

答案1

对于单个文件尝试

mv dir1/dir2/dir3/file.{txt,txt.old}

X{a,b}构造扩展到的位置Xa Xb,您可以使用进行预览

echo dir1/dir2/dir3/file.{txt,txt.old}

看看它是否符合您的需要。

笔记:

  1. 对于多个文件

    mv dir1/dir2/dir3/file{1,2,3}.{txt,txt.old}
    

不太可能扩展为您想要的内容。(这将扩展为 file.txt file1.txt.old file2.txt 的混合...)

  1. {txt,txt.old}可以缩短为{,.old}根据评论

  2. 如果目录名称明确,则可以使用通配符。

    mv *1/*2/d*/*.{,old}
    

用于多个文件使用rename

rename -n s/txt/old.txt/ dir1/dir2/dir3/file*.txt 

删除-n即可有效重命名。

答案2

该命令rename重命名所有匹配的文件。其主要目的是重命名多个文件,但如果 Perl 表达式仅匹配一个文件,则它将仅重命名此单个文件。有关详细信息和发行版特定语法,请阅读手册页:man rename

使用示例:将“/path/file.txt”重命名为“/path/file.txt.old”:

rename 's/file.txt/file.txt.old/g' /path/file.txt

更短的符号(感谢 shalomb):

rename 's/$/.old/' /path/file.txt
rename '$_.=".old"' /path/file.txt

若要进行试运行,请使用rename -n

更多示例和详细信息请访问https://thepcspy.com/read/bulk-rename-files-in-ubuntu/

答案3

对于一次性案例,如果我不想更改当前目录,我可能只使用子 shell:

(cd dir1/dir2/dir3/ && mv file.txt file.txt.old)

因为你cd在子 shell 中,所以你没有改变实际 shell 中的目录

答案4

如果您想进入子目录以缩短mv命令,但之后又想返回当前目录,有两种方法可以实现。一种是将cdandmv放在子 shell 中(正如已经建议的那样)。

另一种是使用pushdpopd更改目录:

pushd dir1/dir2/dir3/; mv file.txt file.txt.old; popd

pushd命令类似于cd,不同之处在于它首先将当前目录的名称推送到堆栈上。popd从堆栈中删除顶部名称并更改到该目录。

相关内容