Linux

如何忽略來自 mv 的錯誤:無法將 ‘XXXXXX 移動到自身的子目錄

  • July 12, 2021

在我們的 RHEL 7.6 伺服器上,我們創建以下文件夾

# mkdir -p /var/data/data-logs_temp

第二部分是將所有內容 /var/data/移至以下位置/var/data/data-logs_temp

# mv /var/data/* /var/data/data-logs_temp

但是我們從mv命令中得到的輸出是:

mv: cannot move ‘/var/data/data-logs_temp’ to a sub directory of itself, ‘/var/data/data-logs_temp/data-logs_temp’

mv命令對此是正確的

但; 是否可以告訴忽略這一點,因為我們需要命令中mv的退出程式碼?mv``0

或者可能有任何其他選項忽略移動本身的子目錄?

您可以使用 bash 的“擴展 glob”語法從要移動的文件列表中排除 data-logs_temp 子目錄:

shopt -s extglob
mv /var/data/!(data-logs_temp) /var/data/data-logs_temp

有關擴展 glob 的更多資訊,請參閱Greg 的 wiki這個問題

在更簡單的 Unix/Linux 世界中,不呼叫擴展選項,可以:

(a)mkdir data-logs_temp在您擁有的任何目錄中,該目錄與 位於同一文件系統中/var/data,並且可由您寫入,而不是位於/var/data(/var如果您具有寫入權限,則可以接受) 的任何子樹中。

(b)cd /var/datamv * /wherever/data-logs_temp,避免使用完整目錄擴展所有全域名稱。這不會複製數據,只會創建連結;並且它不會嘗試將目錄複製到自身中。

(c) mv /wherever/data-logs_temp /var/data。這只會移動一個連結,並保留樹結構。

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