はじめに
windowsバックアップの中にある謎の$OFファイルについて、シェルスクリプトを使った解決手段を一つ提案したいと思います。目次
- 経緯
- $OFフォルダって何なのか
- 解決手段
#1.経緯
先日、windowsより使いやすいと気づいたので、macに移行することを決めましたが、諸事情につき移行アシスタントが使えませんでした。そこでハードディスクにバックアップをとっておき、それをmacに移すことにしましたが、、、、。
Cドライブの他に、$OFフォルダができています。またこのフォルダの中にはさらに数字が割り振られているフォルダがあり、その中にいくつかのファイルが存在しているようで、ファイルをチェックすると前のPCで作成したプログラムやスクリーンショットなどが散見されましたが、元のファイルにあった階層関係及びファイル名が失われているようでした。
#2.$OFフォルダって何なのか
microsoftの質問フォーラムにていくつか回答が載っていました。windowsのファイル履歴によるバックアップの際に、フォルダ名(ファイル名)+タイムスタンプの文字数が255文字の制限を超えた時、あるいはパスが長すぎる時に別のファイル名として保存されたものが、$OFにまとめられているようでした。OF(Over Flow)ということらしいです。
#3.解決手段
フォルダを全部開いてファイルをチェックしていたら日が暮れてしまうので、ファイルに残っている情報をもとにシェルスクリプトでファイルの分別を行うことにしました。ファイルにある情報とは拡張子のことです。xlsxだったりpngのような拡張子ごとにファイル分けされれば、このままの状態よりは探しやすくなると思います。
#IFS(Internal Filed Separator)
IFS_BACKUP=$IFS
IFS=$'\n'
#全てのファイル再帰検索
ALLFILE=$(find . -name '*.*')
#全てのファイルから、拡張子を重複なしで抽出 sedでタイムスタンプなどを取り除いている
find . -name $ALLFILE | sed -r s#"\./[0-9]*/[0-9]* \([0-9]{4}_[0-9]{2}_[0-9]{2} [0-9]{2}_[0-9]{2}_[0-9]{2} UTC)."## >> in.txt
EXTENSION=$(sort in.txt | uniq)
for folder in $EXTENSION
do
#その拡張子のファイルができていないなら新たに作成する
if [ ! -e {$folder} ]; then
mkdir $folder
fi
done
for file in $ALLFILE
do
#拡張子ごとにファイルに振るい分ける
EX=$(echo $file | sed -r s#"\./[0-9]*/[0-9]* \([0-9]{4}_[0-9]{2}_[0-9]{2} [0-9]{2}_[0-9]{2}_[0-9]{2} UTC)."##)
#コピーする
cp $file $EX/
done
IFS=$IFS_BACKUP
#4.おわりに
$OFフォルダに重要なファイルがいくつかあったので取り出せて良かったです。しかし、macは使いやすいですね。visual studioかxcodeかで言われると今のところvisual studioの方が好きですが。