Я использую CentOS 5.5 и хотел бы перемещать большое количество папок в пределах одного тома , сохраняя их mtime
.
Лучшее решение, которое я смог найти, это:
cp -p -r source/data target/
rm -rf source/data
С более чем 1 ТБ данных на общем ресурсе NFS копирование занимает вечность. Я не хочу копировать. Я хочу мгновенного движения.
Когда я перемещаю папку с помощью mv source/data target/
, mtime
для папки (не для файлов) устанавливается текущее время. Это потому, что содержимое папки, которую я перемещаю, модифицируется этой операцией ( ..
запись указывает на другой индекс).
Я придумал следующий сценарий оболочки, который я назвал mv_preserve_mtime.sh
:
#!/bin/bash
# Moves source folder to target folder.
# You are responsible for making sure the target does not exist, otherwise this blows up
export timestamp=`stat -c %y $1`
mv "$1" "$2"
touch --date="${timestamp}" $2
Ну, это тоже не сработало. Папка mtime
восстанавливается, но все папки в папке, которую я перемещаю (только 1 уровень глубиной), mtime
сбрасываются по причинам, которые я не понимаю.
У кого-нибудь есть правильное, эффективное и правильное решение?
mv
шаг, который вызывает проблемы. Сервер NFS на самом деле является хранилищем NetApp, я практически ничего не знаю о его внутренностях.
touch
должно было работать. Кстати более портативный способ был бы touch -r "$1" reference.tmp; mv -- "$1" "$2"; touch -r reference.tmp -- "$2"; rm reference.tmp
.
stat
не был портативным.
touch
не сработала? Этоmv
шаг илиtouch
шаг, который меняет mtime подкаталогов? Какая ОС находится на сервере NFS и (если вы знаете), какой тип файловой системы?