如何在 Linux 命令行中交换两个文件?


作为系统管理员或 DevOps 功能,我们经常需要交换文件内容,例如,假设您有一个 /etc/passwd 的备份文件,名为 /etc/password.backup,并且您想将其恢复到 /etc/passwd,但您也希望将 /etc/passwd 的当前内容复制到 /etc/passwd.backup。换句话说,交换 /etc/passwd 和 /etc/passwd.backup 的内容,以及 /etc/passwd.backup 和 /etc/passwd 的内容。

Linux 操作系统的实用工具和命令使您能够实现/完成各种各样的文件操作目标。出于某种原因,您可能需要在 Linux 文件系统中交换两个文件。

当我们谈论在 Linux 操作系统上交换两个文件时,我们指的不是交换/更换这两个文件的位置,而是它们的内容本身。在本文中,我们将了解如何在 Linux 命令行中交换两个文件。

考虑在 Linux 操作系统环境中存在以下文件,以便更好地理解本教程的目标。

创建两个文件 f1.txt 和 f2.txt。

文件 f1.txt 的内容如下

Hi Welcome in Linux

文件 f2.txt 的内容如下

Hi Welocome in Linux shell scripting
[sachin@lmdesk swapping]$ vim f1.txt
[sachin@lmdesk swapping]$ vim f2.txt
[sachin@lmdesk swapping]$ cat f1.txt
Hi Welcome in Linux!
[sachin@lmdesk swapping]$ cat f2.txt
Hi Welcome in Linux shell scripting

如果我们成功交换这两个文件

文件 f1.txt 将读取 - Hi Welocome in Linux shell scripting

文件 f2.txt 将读取 - Hi Welcome in Linux

使用 mv 命令交换两个文件的内容

mv 命令可用于重命名文件,也可用于将文件从一个位置移动到另一个位置。此处目的是在命令行中交换两个文件,因此我们使用 mv 命令用于重命名目的,而不是将文件移动到其他位置。

在编程和脚本作业中,交换变量之间的值是一个常见的需求。当我们想要交换两个变量的值时,在大多数编程语言中,最佳方法是使用一个临时变量。检查以下演示

temp = x
x = y
y = temp

让我们用 mv 命令实现此算法,mv 命令将修改如下

mv f1.txt test.txt
mv f2.txt f1.txt
mv test.txt f2.txt

这些命令的输出将交换两个文件。

使用 shell 脚本交换两个文件的内容

if (( $# == 2)) ; then
   TMPFILE=$(mktemp $(dirname "$1")/function.txt)
   mv "$1" $TMPFILE && mv "$2" "$1" && mv $TMPFILE "$2"
else
   echo "Error: Two valid file paths required"
   return 1
fi

让我们了解上面的 shell 脚本。$# 是 shell 脚本的参数数量,因此脚本的第一行带有 if 语句,验证 shell 脚本的参数是否为 2,然后且仅当交换内容时。TMPFILE 是一个变量,保存文件的路径,该文件在内容交换过程中临时保存内容,我们之前讨论过的 mv 命令,在这里我们使用它来重命名。如果未将两个文件传递给此脚本,则会生成错误

我们可以简单地将要交换的两个文件作为参数传递。该函数将处理其他所有事情。Bash 的自动完成功能在这里将派上用场。

结论

在本文中,我们学习了如何使用三个 mv 命令交换两个文件的内容。我们还编写了一个 shell 脚本,以便更容易地执行此操作。您可以使用命令执行方法,也可以使用 shell 脚本方法。

更新于: 2022-11-21

1K+ 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.