Linux / 如何重命名文件或目录
在 Linux 中重命名文件或目录时,使用 mv 命令按顺序指定现有路径和新路径。如果目标名称已存在,可能会被覆盖,或者源文件可能会移动到意外位置,因此在执行前应检查。
重命名的基本格式
用于移动文件的 mv 命令也可用于重命名。如果两个路径在同一目录下,只会改变名称;如果它们在不同目录下,位置也会发生变化。
mv -i -- source destination
-i 在覆盖现有目标文件之前会进行检查。-- 表示选项的结束,因此以连字符开头的名称不会被解释为选项。下面的示例基于 GNU coreutils mv 和 Bash shell。
为练习准备文件和目录
在临时目录中进行练习,以免影响现有数据。在同一个终端中按顺序执行以下命令。新创建的临时目录路径将存储在变量 workdir 中。
workdir=$(mktemp -d)
printf 'example\n' > "$workdir/report.txt"
mkdir "$workdir/docs"
ls -l -- "$workdir"
如果输出中出现 report.txt 和 docs,则说明准备就绪。要检查路径,请运行 printf '%s\n' "$workdir"。由于命令使用当前终端的变量,如果您打开一个新终端,需要重新准备。
重命名文件
将练习文件从 report.txt 重命名为 summary.txt 并检查结果。执行前请确保新目标文件尚不存在。
ls -la -- "$workdir"
mv -i -- "$workdir/report.txt" "$workdir/summary.txt"
ls -l -- "$workdir"
cat -- "$workdir/summary.txt"
如果成功,列表将显示 summary.txt 而不是 report.txt,并且最后一个命令将输出 example。在同一文件系统内重命名时,内容保持不变。要恢复到原始名称,请确保原始名称未被使用,然后交换这两个路径并运行 mv -i。
重命名目录
目录的重命名方式相同。以下命令将在目标不存在的实践环境中,将 docs 重命名为 archive。
mv -i -T -- "$workdir/docs" "$workdir/archive"
ls -l -- "$workdir"
如果成功,archive 将会显示,而不是 docs。-T 是 GNU mv 中的一个选项,它不会特别对待最后的路径作为目标目录。没有这个选项,如果你指定一个已经存在的目录作为目标,源项目可能会被移入该目录,而不是被重命名。即使使用 -T,根据已有目标的类型和状态,也可能发生替换或错误,所以请先检查。非空目标目录不能被替换。
检查覆盖和路径
如果您指定一个已存在的文件作为目标,该文件可能会被覆盖。请先备份重要文件,并且仅在决定覆盖时,对 -i 的确认提示输入 y。为了避免覆盖,请输入 n。确认文本可能会因系统和语言设置而有所不同。
如果文件名包含空格,请用双引号将整个路径括起来。以下是创建一个单独练习文件然后重命名的示例。
printf 'notes\n' > "$workdir/old notes.txt"
mv -i -- "$workdir/old notes.txt" "$workdir/new notes.txt"
cat -- "$workdir/new notes.txt"
如果在末尾显示 notes,则表示该文件已以新名称读取。在实际工作中,如果路径指定错误或没有权限,请检查错误信息以及源目录和目标目录的写权限。移动到另一个文件系统时,可能会先复制再删除原文件,因此需要检查空间和结果。有关选项和行为的更多详细信息,请参阅 GNU coreutils 的 mv 手册。




