成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在Linux中如何移動文件

系統 Linux
在 Linux 中移動文件看似比較簡單,但是可用的選項卻比大多數人想象的要多。本文介紹了初學者如何在 GUI 和命令行中移動文件,還介紹了底層實際上發生了什么,并介紹了許多有一定經驗的用戶也很少使用的命令行選項。

[[277757]]

無論你是剛接觸 Linux 的文件移動的新手還是已有豐富的經驗,你都可以通過此深入的文章中學到一些東西。

在 Linux 中移動文件看似比較簡單,但是可用的選項卻比大多數人想象的要多。本文介紹了初學者如何在 GUI 和命令行中移動文件,還介紹了底層實際上發生了什么,并介紹了許多有一定經驗的用戶也很少使用的命令行選項。

移動什么?

在研究移動文件之前,有必要仔細研究移動文件系統對象時實際發生的情況。當文件創建后,會將其分配給一個索引節點inode,這是文件系統中用于數據存儲的固定點。你可以使用 ls 命令看到文件對應的索引節點:

  1. $ ls --inode example.txt
  2. 7344977 example.txt

移動文件時,實際上并沒有將數據從一個索引節點移動到另一個索引節點,只是給文件對象分配了新的名稱或文件路徑而已。實際上,文件在移動時會保留其權限,因為移動文件不會更改或重新創建文件。(LCTT 譯注:在不跨卷、分區和存儲器時,移動文件是不會重新創建文件的;反之亦然)

文件和目錄的索引節點并沒有暗示這種繼承關系,而是由文件系統本身決定的。索引節點的分配是基于文件創建時的順序分配的,并且完全獨立于你組織計算機文件的方式。一個目錄“內”的文件的索引節點號可能比其父目錄的索引節點號更低或更高。例如:

  1. $ mkdir foo
  2. $ mv example.txt foo
  3. $ ls --inode
  4. 7476865 foo
  5. $ ls --inode foo
  6. 7344977 example.txt

但是,將文件從一個硬盤驅動器移動到另一個硬盤驅動器時,索引節點基本上會更改。發生這種情況是因為必須將新數據寫入新文件系統。因此,在 Linux 中,移動和重命名文件的操作實際上是相同的操作。無論你將文件移動到另一個目錄還是在同一目錄使用新名稱,這兩個操作均由同一個底層程序執行。

本文重點介紹將文件從一個目錄移動到另一個目錄。

用鼠標移動文件

圖形用戶界面是大多數人都熟悉的友好的抽象層,位于復雜的二進制數據集合之上。這也是在 Linux 桌面上移動文件的首選方法,也是最直觀的方法。從一般意義上來說,如果你習慣使用臺式機,那么你可能已經知道如何在硬盤驅動器上移動文件。例如,在 GNOME 桌面上,將文件從一個窗口拖放到另一個窗口時的默認操作是移動文件而不是復制文件,因此這可能是該桌面上最直觀的操作之一:

 

Moving a file in GNOME.

而 KDE Plasma 桌面中的 Dolphin 文件管理器默認情況下會提示用戶以執行不同的操作。拖動文件時按住 Shift 鍵可強制執行移動操作:

 

Moving a file in KDE.

在命令行移動文件

用于在 Linux、BSD、Illumos、Solaris 和 MacOS 上移動文件的 shell 命令是 mv。不言自明,簡單的命令 mv <source> <destination> 會將源文件移動到指定的目標,源和目標都由絕對相對文件路徑定義。如前所述,mvPOSIX 用戶的常用命令,其有很多不為人知的附加選項,因此,無論你是新手還是有經驗的人,本文都會為你帶來一些有用的選項。

但是,不是所有 mv 命令都是由同一個人編寫的,因此取決于你的操作系統,你可能擁有 GNU mv、BSD mv 或 Sun mv。命令的選項因其實現而異(BSD mv 根本沒有長選項),因此請參閱你的 mv 手冊頁以查看支持的內容,或安裝你的首選版本(這是開源的奢侈之處)。

移動文件

要使用 mv 將文件從一個文件夾移動到另一個文件夾,請記住語法 mv <source> <destination>。 例如,要將文件 example.txt 移到你的 Documents 目錄中:

  1. $ touch example.txt
  2. $ mv example.txt ~/Documents
  3. $ ls ~/Documents
  4. example.txt

就像你通過將文件拖放到文件夾圖標上來移動文件一樣,此命令不會將 Documents 替換為 example.txt。相反,mv 會檢測到 Documents 是一個文件夾,并將 example.txt 文件放入其中。

你還可以方便地在移動文件時重命名該文件:

  1. $ touch example.txt
  2. $ mv example.txt ~/Documents/foo.txt
  3. $ ls ~/Documents
  4. foo.txt

這很重要,這使你不用將文件移動到另一個位置,也可以重命名文件,例如:

  1. $ touch example.txt
  2. $ mv example.txt foo2.txt
  3. $ ls foo2.txt`

移動目錄

不像 cp 命令,mv 命令處理文件和目錄沒有什么不同,你可以用同樣的格式移動目錄或文件:

  1. $ touch file.txt
  2. $ mkdir foo_directory
  3. $ mv file.txt foo_directory
  4. $ mv foo_directory ~/Documents

安全地移動文件

如果你移動一個文件到一個已有同名文件的地方,默認情況下,mv 會用你移動的文件替換目標文件。這種行為被稱為清除clobbering,有時候這就是你想要的結果,而有時則不是。

一些發行版將 mv 別名定義為 mv --interactive(你也可以自己寫一個),這會提醒你確認是否覆蓋。而另外一些發行版沒有這樣做,那么你可以使用 --interactive-i 選項來確保當兩個文件有一樣的名字而發生沖突時讓 mv 請你來確認。

  1. $ mv --interactive example.txt ~/Documents
  2. mv: overwrite '~/Documents/example.txt'?

如果你不想手動干預,那么可以使用 --no-clobber-n。該選項會在發生沖突時靜默拒絕移動操作。在這個例子當中,一個名為 example.txt 的文件以及存在于 ~/Documents,所以它不會如命令要求從當前目錄移走。

  1. $ mv --no-clobber example.txt ~/Documents
  2. $ ls
  3. example.txt

帶備份的移動

如果你使用 GNU mv,有一個備份選項提供了另外一種安全移動的方式。要為任何沖突的目標文件創建備份文件,可以使用 -b 選項。

  1. $ mv -b example.txt ~/Documents
  2. $ ls ~/Documents
  3. example.txt    example.txt~

這個選項可以確保 mv 完成移動操作,但是也會保護目錄位置的已有文件。

另外的 GNU 備份選項是 --backup,它帶有一個定義了備份文件如何命名的參數。

  • existing:如果在目標位置已經存在了編號備份文件,那么會創建編號備份。否則,會使用 simple 方式。
  • none:即使設置了 --backup,也不會創建備份。當 mv 被別名定義為帶有備份選項時,這個選項可以覆蓋這種行為。
  • numbered:給目標文件名附加一個編號。
  • simple:給目標文件附加一個 ~,當你日常使用帶有 --ignore-backups 選項的 ls 時,這些文件可以很方便地隱藏起來。

簡單來說:

  1. $ mv --backup=numbered example.txt ~/Documents
  2. $ ls ~/Documents
  3. -rw-rw-r--. 1 seth users 128 Aug  1 17:23 example.txt
  4. -rw-rw-r--. 1 seth users 128 Aug  1 17:20 example.txt.~1~

可以使用環境變量 VERSION_CONTROL 設置默認的備份方案。你可以在 ~/.bashrc 文件中設置該環境變量,也可以在命令前動態設置:

  1. $ VERSION_CONTROL=numbered mv --backup example.txt ~/Documents
  2. $ ls ~/Documents
  3. -rw-rw-r--. 1 seth users 128 Aug  1 17:23 example.txt
  4. -rw-rw-r--. 1 seth users 128 Aug  1 17:20 example.txt.~1~
  5. -rw-rw-r--. 1 seth users 128 Aug  1 17:22 example.txt.~2~

--backup 選項仍然遵循 --interactive-i 選項,因此即使它在執行備份之前創建了備份,它仍會提示你覆蓋目標文件:

  1. $ mv --backup=numbered example.txt ~/Documents
  2. mv: overwrite '~/Documents/example.txt'? y
  3. $ ls ~/Documents
  4. -rw-rw-r--. 1 seth users 128 Aug  1 17:24 example.txt
  5. -rw-rw-r--. 1 seth users 128 Aug  1 17:20 example.txt.~1~
  6. -rw-rw-r--. 1 seth users 128 Aug  1 17:22 example.txt.~2~
  7. -rw-rw-r--. 1 seth users 128 Aug  1 17:23 example.txt.~3~

你可以使用 --force-f 選項覆蓋 -i

  1. $ mv --backup=numbered --force example.txt ~/Documents
  2. $ ls ~/Documents
  3. -rw-rw-r--. 1 seth users 128 Aug  1 17:26 example.txt
  4. -rw-rw-r--. 1 seth users 128 Aug  1 17:20 example.txt.~1~
  5. -rw-rw-r--. 1 seth users 128 Aug  1 17:22 example.txt.~2~
  6. -rw-rw-r--. 1 seth users 128 Aug  1 17:24 example.txt.~3~
  7. -rw-rw-r--. 1 seth users 128 Aug  1 17:25 example.txt.~4~

--backup 選項在 BSD mv 中不可用。

一次性移動多個文件

移動多個文件時,mv 會將最終目錄視為目標:

  1. $ mv foo bar baz ~/Documents
  2. $ ls ~/Documents
  3. foo   bar   baz

如果最后一個項目不是目錄,則 mv 返回錯誤:

  1. $ mv foo bar baz
  2. mv: target 'baz' is not a directory

GNU mv 的語法相當靈活。如果無法把目標目錄作為提供給 mv 命令的最終參數,請使用 --target-directory-t 選項:

  1. $ mv --target-directory=~/Documents foo bar baz
  2. $ ls ~/Documents
  3. foo   bar   baz

當從某些其他命令的輸出構造 mv 命令時(例如 find 命令、xargsGNU Parallel),這特別有用。

基于修改時間移動

使用 GNU mv,你可以根據要移動的文件是否比要替換的目標文件新來定義移動動作。該方式可以通過 --update-u 選項使用,在BSD mv 中不可用:

  1. $ ls -l ~/Documents
  2. -rw-rw-r--. 1 seth users 128 Aug  1 17:32 example.txt
  3. $ ls -l
  4. -rw-rw-r--. 1 seth users 128 Aug  1 17:42 example.txt
  5. $ mv --update example.txt ~/Documents
  6. $ ls -l ~/Documents
  7. -rw-rw-r--. 1 seth users 128 Aug  1 17:42 example.txt
  8. $ ls -l

此結果僅基于文件的修改時間,而不是兩個文件的差異,因此請謹慎使用。只需使用 touch 命令即可愚弄 mv

  1. $ cat example.txt
  2. one
  3. $ cat ~/Documents/example.txt
  4. one
  5. two
  6. $ touch example.txt
  7. $ mv --update example.txt ~/Documents
  8. $ cat ~/Documents/example.txt
  9. one

顯然,這不是最智能的更新功能,但是它提供了防止覆蓋最新數據的基本保護。

移動

除了 mv 命令以外,還有更多的移動數據的方法,但是作為這項任務的默認程序,mv 是一個很好的通用選擇。現在你知道了有哪些可以使用的選項,可以比以前更智能地使用 mv 了。 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2021-08-13 15:00:40

Linux終端移動文件

2019-03-18 09:40:44

Linux命令編程語言

2018-06-01 10:37:26

Linux歸檔文件壓縮文件

2014-09-01 10:43:35

Linux

2021-01-19 08:07:50

Linux日期文件

2023-03-06 07:25:17

LinuxAdvanced

2012-02-06 13:26:09

2021-02-26 14:20:35

LinuxWindowsexe文件

2013-12-30 10:43:15

云計算移動數據云安全

2018-11-12 09:30:49

Linux命令文件管理器

2018-01-08 15:30:18

Linux命令date

2022-08-14 19:19:14

Linux

2023-03-21 12:52:05

Linux創建文件

2009-05-26 12:23:56

Linux變量文件命名

2009-09-19 10:39:45

Windows 7快速復制文件

2016-11-17 12:46:45

2023-04-17 16:17:19

LinuxPDF

2011-07-07 17:30:25

iPhone Xcode

2023-05-13 17:43:17

Linux文件文件夾

2021-08-16 13:34:07

Linux終端刪除文件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线免费小视频 | 免费一级片 | 国产视频一区二区 | 久久久久久久一区二区 | 波多野结衣一区二区 | 国产福利小视频 | 视频一区二区三区中文字幕 | 蜜桃官网| 天天看天天爽 | h在线免费观看 | 中文字幕国产视频 | 精品久久久久久久久久久久 | 在线啊v | 国产一区二区日韩 | 国产精品毛片一区二区三区 | 精品免费国产视频 | 狠狠狠色丁香婷婷综合久久五月 | 操人网站 | 日韩一区二区三区视频在线观看 | 中文字幕成人 | 无码一区二区三区视频 | 三级成人在线 | 99久久国产精 | 欧美一级在线免费观看 | 久久久久久成人 | 国产精品久久久久国产a级 欧美日本韩国一区二区 | 国产成人av一区二区三区 | 欧美成人a| 亚洲视频 欧美视频 | 天天躁日日躁狠狠的躁天龙影院 | 96av麻豆蜜桃一区二区 | 成人在线精品 | 久久精品视频免费观看 | 中文字幕在线视频免费观看 | 成人免费xxxxx在线视频 | 99精品视频在线 | 久热国产在线 | 超碰婷婷| 黄色网址免费看 | www.久久 | 视频在线一区二区 |