san*_*zti 20 linux files filesystems mv
在 Linux 中,我有时会像这样重命名文件:
mv dir1/dir2/dir3/file.txt dir1/dir2/dir3/file.txt.old
Run Code Online (Sandbox Code Playgroud)
请注意,我只想重命名文件,而不是将其移动到另一个目录。
是否有一个命令可以让我执行该命令的速记版本?我在想这样的事情:
mv dir1/dir2/dir3/file.txt file.txt.old
Run Code Online (Sandbox Code Playgroud)
或者甚至是类似的东西(只是附加到名称):
mv dir1/dir2/dir3/file.txt {}.old
Run Code Online (Sandbox Code Playgroud)
我的目标是不必再次指定完整路径。
我知道我写的那些“例子”不起作用,但这只是我想要完成的一个想法。
我不想进入目录。
Arc*_*mar 46
对于单个文件尝试
mv dir1/dir2/dir3/file.{txt,txt.old}
Run Code Online (Sandbox Code Playgroud)
在X{a,b}构造扩展到的地方Xa Xb,您可以使用预览
echo dir1/dir2/dir3/file.{txt,txt.old}
Run Code Online (Sandbox Code Playgroud)
看看它是否适合您的需要。
笔记:
对于多个文件
mv dir1/dir2/dir3/file{1,2,3}.{txt,txt.old}
Run Code Online (Sandbox Code Playgroud)不太可能扩展到你想要的。(这将扩展为混合的 file.txt file1.txt.old file2.txt ...)
{txt,txt.old}可以{,.old}根据评论缩短为
如果目录名称明确,则可以使用通配符。
mv *1/*2/d*/*.{,old}
Run Code Online (Sandbox Code Playgroud)多文件使用 rename
rename -n s/txt/old.txt/ dir1/dir2/dir3/file*.txt
Run Code Online (Sandbox Code Playgroud)
删除-n以进行有效的重命名。
该命令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
Run Code Online (Sandbox Code Playgroud)
对于试运行使用rename -n。
更多示例和详细信息可以在https://thepcspy.com/read/bulk-rename-files-in-ubuntu/找到