如何在Linux中重命名文件和目录
重命名文件是你在Linux系统中经常需要执行的最基本的任务之一。你可以使用GUI文件管理器或通过命令行终端重命名文件。
重命名一个文件很容易,但一次重命名多个文件可能是一个挑战,特别是对刚接触Linux的用户来说。
在本教程中,我们将向你展示如何使用mv
和rename
命令来重命名文件和目录。
用mv
命令重命名文件
mv
命令(移动的简称)是用来重命名或将文件从一个位置移动到另一个位置。mv
命令的语法如下。
mv [OPTIONS] source destination
source
可以是一个或多个文件,或目录,destination
可以是一个单独的文件或目录。
- 如果你指定多个文件为
source
,destination
必须是一个目录。在这种情况下,source
的文件会被移到目标目录中。 - 如果你指定一个文件为
source
,而destination
的目标是一个现有的目录,那么该文件就会被移动到指定的目录中。 - 要重命名一个文件,你需要指定一个文件作为
source
,一个文件作为destination
的目标。
例如,如果要将文件file1.txt
重命名为file2.txt
,你需要运行。
mv file1.txt file2.txt
用mv
命令重命名多个文件
mv
命令一次只能重命名一个文件,但它可以与其他命令一起使用,如find
或在bash for
或while
循环中使用,以重命名多个文件。
下面的例子显示了如何使用Bash for循环来重命名当前目录中的所有.html
文件,将.html
的扩展名改为.php
。
for f in *.html; do
mv -- "$f" "${f%.html}.php"
done
让我们逐行分析一下这段代码。
- 第一行创建了一个
for
的循环,并遍历所有以.html
结尾的文件的列表。 - 第二行适用于列表中的每一项,并将文件移动到一个新的文件中,用
.php
替换.html
。部分${file%.html}
是使用shell参数expandation来删除文件名中的.html
部分。 done
表示循环段的结束。
下面是一个使用mv
与find
结合的例子,以达到与上述相同的效果。
find . -depth -name "*.html" -exec sh -c 'f="{}"; mv -- "$f" "${f%.html}.php"' \;
find
命令是用-exec
选项将当前目录中所有以.html
结尾的文件逐一传递给mv
。字符串{}
是当前正在处理的文件的名称。
从上面的例子可以看出,使用mv
命令重命名多个文件并不是一件容易的事情,因为它需要对Bash脚本有很好的了解。
用rename
命令重命名文件
rename
命令是用来重命名多个文件的。这个命令比mv
更高级,因为它需要一些正则表达式的基本知识。
有两个版本的rename
命令,语法不同。在本教程中,我们将使用Perl版本的rename
命令。如果你的系统中没有安装这个版本,你可以用你的发行版的软件包管理器轻松地安装它。
在Ubuntu和Debian上安装
rename
的方法sudo apt install rename
在CentOS和Fedora上安装
rename
的方法sudo yum install prename
在Arch Linux上安装
rename
。yay perl-rename ## or yaourt -S perl-rename
rename
命令的句法如下。
rename [OPTIONS] perlexpr files
rename
命令将根据指定的perlexpr
正则表达式重命名files
。你可以在这里阅读更多关于perl正则表达式的信息 。
下面的例子将把所有扩展名为.html
的文件改成.php
。
rename 's/.html/.php/' \*.html
你可以使用-n
选项来打印要重命名的文件的名称,而不重命名它们。
rename -n 's/.html/.php/' \*.html
输出结果将看起来像这样。
输出
rename(file-90.html, file-90.php)
rename(file-91.html, file-91.php)
rename(file-92.html, file-92.php)
rename(file-93.html, file-93.php)
rename(file-94.html, file-94.php)
默认情况下,rename
命令不会覆盖现有文件。传递-f
选项以允许现有文件被覆盖。
rename -f 's/.html/.php/' \*.html
下面是几个比较常见的例子,说明如何使用rename
命令。
将文件名中的空格替换为下划线
rename 'y/ /\_/' \*
将文件名转换为小写字母
rename 'y/A-Z/a-z/' \*
将文件名转换为大写字母
rename 'y/a-z/A-Z/' \*
总结
我们已经向你展示了如何使用mv
和rename
命令来重命名文件。
在Linux中还有其他命令可以重命名文件,如mmv
。对命令行感到畏惧的Linux新用户可以使用GUI批量重命名工具,如Métamorphose 。
如果你有任何问题或反馈意见,请随时留言。