使用 find 指令移動目錄

使用 find 指令移動目錄

我正在嘗試在一個路徑中尋找特定目錄,並使用 find 將目錄移至其他路徑。

來源目錄如下所示,

/Dir1/country1/month1/date1,date2,date3
/Dir1/country2/month1/date1,date2,date3
...
.
.
/Dir1/country10/month1/date1,date2,date3

我正在嘗試找到 date1 目錄並移動到目的地

/備份/來源1/目錄1/

我正在使用下面的命令

[root@mytest Dir1]# find -name "date1" -exec mv {} /Backup/source1/Dir1/{} \;

我遇到了以下錯誤。

mv:無法保留「/Backup/source1/Dir1/./country1/month1/date1/date1/date1_1.txt」的所有權:不允許操作

不確定如何刪除目標中 date1 目錄的重複項和“./”也在製造問題。

最美好的祝愿,KJ

答案1

Linux 手冊頁狀態:

mv - 移動(重新命名)文件

因此您不能用來mv移動目錄。但是,您可以先複製它,然後刪除舊副本。

   SRC_DIR=$(find . -type d -name date1 -print); echo $SRC_DIR

將把您感興趣的目錄的相對路徑儲存在一個方便的變數中。現在我們可以將目錄放在新位置,

   mkdir /Backup/source1/$SRC_DIR

前提是您有權限這樣做:事實上,上面的錯誤訊息是關於您沒有足夠的權限來建立新檔案(它本來應該是一個資料夾,但由於上述錯誤而變成了一個檔案)。您確定新的 /Backup/dir1 屬於您嗎?你應該檢查一下,然後修復它。

現在您可以遞歸地將所有內容複製到新目錄:

   cp -R $SRC_DIR/* /Backup/dir1/$SRC_DIR
   cp -R $SRC_DIR/.[a-Z]* /Backup/dir1/$SRC_DIR

最後,如果必須的話,您可以刪除舊副本:

   cd $SRC_DIR
   rm -fR *
   rm -fR .[a-Z]* 

現在該目錄是空的並且可以刪除。

答案2

不要使用 Blunt 工具 move,而是查看 rsync,它可以在存檔模式下移動目錄樹,從而保留權限以及軟硬符號連結。

此外,如果您updatedb以 root 身分鍵入,它將更新已locate安裝軟體包的各個路徑樹中的檔案資料庫。二進位檔案、手冊頁和原始碼樹。使用whereis或進行搜尋locate比每次進行實際的磁碟搜尋要快得多。

相關內容