Directory

如何將目錄移動到同名目錄中?

  • December 23, 2019

我有一個foo包含幾個文件的目錄:

.
└── foo
   ├── a.txt
   └── b.txt

我想將它移動到同名的目錄中:

.
└── foo
   └── foo
       ├── a.txt
       └── b.txt

我目前正在創建一個臨時目錄bar,然後移入foo並重bar命名barfoo

mkdir bar
mv foo bar
mv bar foo

但這感覺有點麻煩,我必須為bar尚未使用的名稱選擇一個名稱。

有沒有更優雅或更直接的方法來實現這一目標?如果這很重要,我在 macOS 上。

要在目前目錄中安全地創建一個臨時目錄,使用尚未使用的名稱,您可以mktemp -d像這樣使用:

tmpdir=$(mktemp -d "$PWD"/tmp.XXXXXXXX)   # using ./tmp.XXXXXXXX would work too

mktemp -d命令將在給定路徑上創建一個目錄,X路徑名末尾的 -es 將替換為隨機字母數字字元。它將返回創建的目錄的路徑名,我們將這個值儲存在tmpdir. 1

tmpdir然後可以在遵循您已經在執行的相同過程時使用此變數,並bar替換為"$tmpdir"

mv foo "$tmpdir"
mv "$tmpdir" foo
unset tmpdir

最後unset tmpdir的只是刪除變數。


1 通常,人們應該能夠將TMPDIR環境變數設置為一個目錄路徑,在該目錄路徑中,人們想要使用mktemp.並將在完全不同的位置創建目錄。但是,上述內容適用於 macOS。如果預設臨時目錄位於另一個分區並且該目錄包含大量數據(即它會很慢),則使用稍微更方便tmpdir=$(TMPDIR=$PWD mktemp -d)甚至tmpdir=$(TMPDIR=. mktemp -d)只會在 macOS 上成為問題。foo

引用自:https://unix.stackexchange.com/questions/555047