如何在 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+ 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告