![使用 find 指令移動目錄](https://rvso.com/image/1388759/%E4%BD%BF%E7%94%A8%20find%20%E6%8C%87%E4%BB%A4%E7%A7%BB%E5%8B%95%E7%9B%AE%E9%8C%84.png)
我正在嘗試在一個路徑中尋找特定目錄,並使用 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
比每次進行實際的磁碟搜尋要快得多。