Я использую 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 и (если вы знаете), какой тип файловой системы?