在保留所有屬性的同時將文件移出卷然後重新打開?
我有一種情況,我正在測試一個有一些元數據問題的新文件系統。所有文件都完好無損,但是我最終必須有效地將每個文件移到另一個卷上,然後立即放回原處。
顯然
mv
不會成功,因為它無法保留所有屬性(尤其是所有時間戳)。cp -p /original/path/to/file /tmp/location/file
在執行, ,rm /original/path/to/file
,時cp -p /tmp/location/file /original/path/to/file
,我在考慮更多類似於 find 命令的內容rm /tmp/location/file
。也許所有這些命令都在傳遞給 find exec 的腳本中?我不確定這裡最有效的方法,但想要一些快速輸入,以確保我涵蓋所有基礎並有一個精確的命令,不會讓我為某種數據屬性失去感到悲痛。並做了。我有數百 GB 的數據要來回移動,所以我需要盡可能小心和高效。
這是我到目前為止提出的解決方案,希望能提供一些意見:
外殼腳本
safe_move.sh
:#!/usr/bin/env bash SRC_FILE_AND_PATH="$1" SRC_BASENAME=`basename "$1"` DESTINATION_PATH="/mnt/tmp" cp -a ${SRC_FILE_AND_PATH} ${DESTINATION_PATH}/${SRC_BASENAME} rm -f ${SRC_FILE_AND_PATH} cp -a ${DESTINATION_PATH}/${SRC_BASENAME} ${SRC_FILE_AND_PATH} rm -f ${DESTINATION_PATH}/${SRC_BASENAME}
這將被呼叫:
find /path/to/move -type f -exec safe_move.sh {} \;
有什麼想法或更正嗎?
- 我確實發現了一個問題,由於修改了文件夾的子文件夾,這將改變文件夾日期…… hrm。不知道如何克服這一點。
考慮
tar
與-p
(--preserve
) 一起使用。這樣你也有一個很好的 tarball 可以保存……你知道……以防萬一。我知道不會留下任何元數據。如果發現我錯了,我也不承擔任何責任。=)**編輯:**符號連結日期不會被保留!***看?!***永遠不要相信擁有 root 權限的貓。
其他選項包括
cplv
但您沒有至少與源大小相同的捲組。cpdup
也。如果它們都在同一個卷組上,rsync
可能是一種選擇。
我注意到你已經用 FreeBSD 標籤標記了它。如果 FreeBSD 是您的作業系統,那麼
dump -0 -f /path/to/destination/file /what/to/dump
您將需要的其他命令是
newfs /dev/ada0p1 mount /dev/ada0p1 /mnt cd /mnt restore -r -f /path/to/destination/file
您想用適合您系統的設備節點替換這些設備節點。此外,您要堅持轉儲整個分區並避免轉儲分區的一部分。