「リカバリ後のタスク」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(add en page link.)
 
(同じ利用者による、間の6版が非表示)
1行目: 1行目:
  +
[[en:Post recovery tasks]]
 
[[Category:システムリカバリ]]
 
[[Category:システムリカバリ]]
 
{{Related articles start}}
 
{{Related articles start}}
71行目: 72行目:
 
=== リカバリ後のタスク ===
 
=== リカバリ後のタスク ===
   
このスクリプトは、'''path to file/file name | info about the file | mime type | size | filename | restored_filename''' のパターンでファイルを作成します。以下に例を示します:{{ic|<nowiki>./recup_dir.1/f872690288_image.jpg|JPEG image data, JFIF standard 1.01|image/jpeg|24K|f872690288_image.jpg|image.jpg</nowiki>}}
+
このスクリプトは、'''path to file/file name | info about the file | mime type | size | filename | restored_filename''' のパターンでファイルを作成します。以下に例を示します:
  +
{{ic|<nowiki>./recup_dir.1/f872690288_image.jpg|JPEG image data, JFIF standard 1.01|image/jpeg|24K|f872690288_image.jpg|image.jpg</nowiki>}}
   
 
{{Warning|
 
{{Warning|
  +
{{ic|echo}} コマンドを {{ic|cp}} と {{ic|mkdir}} の前から削除してください。そうしないと、スクリプトは実際に何も復元せず、宛先に何が行われるかを示すだけになります。 {{ic|echo}} コマンドを使って、ファイル名や宛先の設定が正しく表示されていることを確認するのは良い方法です。
* Remove the {{ic|echo}} command in front of the {{ic|cp}} and {{ic|mkdir}} otherwise the script will only show what is going to to be done without restoring anything to a destination, do a dry run. To use {{ic|echo}} command is good for verify that settings for filenames and destinations looks correctly.
 
  +
これらのスクリプトは、 ''photorec'' で作成されたフォルダからファイルを復元するための例です。注意してください!}}
* Those scripts are only examples for restoration of files from folders created by ''photorec'', be careful!}}
 
   
==== Head of the script ====
+
==== スクリプトの先頭 ====
   
  +
現在のディレクトリに {{ic|info-mime-size-db.txt}} が存在するかどうかを簡単に確認する方法は以下の通りです。スクリプトの残りの部分で可能なエラーを防ぐためです。
Here is a simple check if the {{ic|info-mime-size-db.txt}} exists in the current directory to prevent possible errors with rest of the script.
 
 
{{bc|#!/bin/bash
 
{{bc|#!/bin/bash
 
if [ -f info-mime-size-db.txt ]; then echo The file info-mime-size-db.txt exists continuing... ;
 
if [ -f info-mime-size-db.txt ]; then echo The file info-mime-size-db.txt exists continuing... ;
87行目: 89行目:
 
}}
 
}}
   
==== Start variables ====
+
==== 変数の開始 ====
   
 
{{bc|1=CountAll="0"
 
{{bc|1=CountAll="0"
96行目: 98行目:
 
CountToLimit="0"}}
 
CountToLimit="0"}}
   
==== Populate an array ====
+
==== 配列にデータを追加 ====
   
  +
{{Warning|配列は {{ic|info-mime-size-db.txt}} ファイルからデータを読み込むことで追加されます。そうでない場合、スクリプトは正しく動作しません!}}
{{Warning|Arrays become populated by reading data from a {{ic|info-mime-size-db.txt}} file. Otherwise the script will not work correctly!}}
 
   
===== With a while loop =====
+
===== while ループを使った方法 =====
   
Here will be a short examples about how to speed up population of the array from a file with patterns by using [https://tldp.org/LDP/abs/html/string-manipulation.html bash standard expressions] instead of ''awk'', ''grep'' and ''sed''. The {{ic|ArrayOfFiles}} array will contain full path to the file and the {{ic|ArrayOfsorted}} will contain original names restored by ''photorec'' but without random generated part.
+
ここでは、''awk''、''grep''、および ''sed'' の代わりに [https://tldp.org/LDP/abs/html/string-manipulation.html bash standard expressions] を使用して、ファイルからパターンを持つ配列を高速化する方法について簡単な例を示します。{{ic|ArrayOfFiles}} 配列にはファイルへの完全なパスが含まれ、{{ic|ArrayOfsorted}} には ''photorec'' によって復元された元の名前が含まれますが、ランダムに生成された部分は含まれません。
   
 
{{bc|<nowiki>
 
{{bc|<nowiki>
116行目: 118行目:
 
</nowiki>}}
 
</nowiki>}}
   
==== Loops for restoration ====
+
==== 復元のためのループ ====
   
  +
これは、ファイルの復元を管理するスクリプトの最後の部分です。宛先のサブディレクトリにファイルが一定数たまると、宛先フォルダに新しい番号付きサブディレクトリを作成し、そこにファイルをコピーし続けます。
This is a finale part of a script that manages restoration of files. When limit of files in a destination sub-directory reached then it creates and new one numbered sub-directory in the destination folder and continuing to copy files there.
 
   
 
{{bc|<nowiki>SizeOfArray=${#ArrayOfFiles[@]}
 
{{bc|<nowiki>SizeOfArray=${#ArrayOfFiles[@]}
137行目: 139行目:
 
CountAll=$((CountAll+1))
 
CountAll=$((CountAll+1))
 
done</nowiki>}}
 
done</nowiki>}}
{{Note|In order to add more specific details about files in their names or names of the destination directories you will need to gather information about them with external programs, e.g. for image resolution: {{Pkg|feh}} {{ic|<nowiki>feh -l "${ArrayOfFiles[$CountAll]}" | tail -1 | awk '{print $3"x"$4}'</nowiki>}}, {{Pkg|imagemagick}} {{ic|<nowiki>identify ${ArrayOfFiles[$CountAll]} | awk '{print $3}'</nowiki>}}. }}
+
{{Note|ファイル名や宛先ディレクトリ名にファイルに関するより具体的な詳細を追加するには、外部プログラムを使用して情報を収集する必要があります。例えば、画像の解像度については、{{Pkg|feh}} {{ic|<nowiki>feh -l "${ArrayOfFiles[$CountAll]}" | tail -1 | awk '{print $3"x"$4}'</nowiki>}}{{Pkg|imagemagick}} {{ic|<nowiki>identify ${ArrayOfFiles[$CountAll]} | awk '{print $3}'</nowiki>}} などがあります。 }}
   
  +
== ファイルが十分に少ない場合 ==
== Enough if files are few ==
 
   
If it is not so many files with the same extension then it will be enough to use something like {{ic|find -name *.xcf -exec copy "{}" $HOME/Desktop \;}} to avoid the ''overload'' of a destination folder you can calculate how many files are found {{ic|<nowiki>find -type f -name *xcf | wc -l</nowiki>}}. {{Note|The photorec utility stores up to 500 recovered files in a single folder.}}
+
同じ拡張子を持つファイルがそれほど多くない場合、{{ic|find -name *.xcf -exec copy "{}" $HOME/Desktop ;}} のようなものを使用するだけで十分です。宛先フォルダの「オーバーロード」を避けるために、見つかったファイルの数を計算できます {{ic|<nowiki>find -type f -name *xcf | wc -l</nowiki>}}{{Note|photorec ユーティリティは、1つのフォルダに最大500個の回復ファイルを格納します。}}

2023年4月6日 (木) 16:43時点における最新版

関連記事

ノート: 回復または復元されたファイルへのアクセスを高速化するために、shake ユーティリティを使用してデフラグメンテーションすることができます。

チェックサムで一意なファイルのみをリストする

ノート:
  • photorec が元の名前を復元できるファイルのみをリストするには、awkprint の前に if(index(A,"_") != 0) を追加します。すでに作成されたファイルで単独のファイル名または拡張子のみをリストする場合は、awk をスタンドアロンコマンドとして使用することもできます。
  • 拡張子のみをリストする場合は、awkD=B;gsub(/[^.]./,"",D) を使用することができます。これにより、tar.gz 拡張子から gz のみを表示することができます。また、ファイル名の最初のドットまでをカットする gsub の代わりに sub を使用することもできます。

ファイルが復元されると、多くのファイルが同じ ハッシュ値 を持つ場合があります。重複するファイルの1つだけを含む一意のファイルのリストを作成することで、他のユーティリティを使用してファイルに関する追加情報を収集する際に、保存されたファイル名とパスを使用して高速化できます。

find -type f -print0 | \
 xargs -0  md5sum | \
 awk '// {Count[$1]++;
 if( Count[$1] == 1 ){C=substr($0,index($0,"./"));A=$0;sub(/^.*\//,"",A);B=substr(A,index(A,"_")+1);HASHsum=$1;
 print A"|"B"|"C"|"HASHsum}}' 
 

これにより、画面に以下のパターンで結果が表示されます: filename|restored_filename|full_path_to_filename|check_sum

f851733136_WindowMaker_Dockapps.pdf|WindowMaker_Dockapps.pdf|./f851733136_WindowMaker_Dockapps.pdf|272cc4fcdc8027e3b8b53318f08f3f01

ファイル名を整理して並べる

宛先のファイル名をより bash に使いやすくするために、特殊な記号やスペースを削除し、重複した名前を持つファイルのよりよい概要のために2番目の列でソートすることができます。重複したファイル名には、restored_filename の前に ¤ を区切り記号として加えられます。スクリプトは、上記で作成したスクリプトによって作成されたファイルを使用し、結果を stdout に出力します。

clean_and_sort.sh
if [ ! -z "$1" ];then
  awk -F"|" '{B=$2;
   gsub(/\(/,"",B);gsub(/\)/,"",B);
   gsub(/!/,"",B); gsub(/?/,"",B);
   gsub(/\[/,"",B);gsub(/\]/,"",B);
   gsub(/{/,"",B); gsub(/}/,"",B);
   gsub(/&/,"",B); gsub(/=/,"",B);
   gsub(/\^/,"",B);gsub(/~/,"",B);
   gsub(" ","",B) ;gsub(/#/,"",B);
   gsub(/\"/,"",B);gsub(/;/,"",B);
   gsub(/\\/,"",B);gsub(/\//,"",B);
   sub(/-*/,"",B); sub(/+*/,"",B);
   print $1" | "B" | "$3}' "$1" | \
  sort --field-separator=\| -s -d -k 2  \
awk -F'|' '{B=$2;Count[B]++;sub(/ */,"",B);if( Count[$2] == 1 ){print $1"|"B"|"$3}else{print $1"|"Count[$2]-1"¤"B"|"$3"|"$4} }'
else echo 'Path to file is missing!'
fi

ファイル名に特殊記号が含まれている場合、特にそれらがファイル名の先頭にある場合は、クォートやバックスラッシュ を使用しないと、mvcp のようなコマンドで管理するのが難しくなりますが、それらをすべて削除する代わりに、HTML hex codes で置き換えることができます。

Photorec

配列のデータを含むファイルの作成

この例では、xdg-mime を使用して mime タイプに関する情報を収集していますが、file --mime-type -bfile -i -b コマンドは xdg-mime query filetype コマンドと同じ出力を提供しますが、より詳細な情報を提供することもあります。このスクリプトは、info-mime-size-db.txt にファイルの追加情報を多数収集します。スクリプトを photorec で使用した宛先ディレクトリに配置し、宛先ディレクトリ内のユニークなチェックサムのリストからのファイルへのパスを使用して実行します。例:awk -F" | " '{system("start-collect-file-info.sh "$3" "$1" "$2)}' file_list-unique_checksums

start-collect-file-info.sh
#!/bin/bash
if [ ! -z "$1" ] && [ ! -z "$2" ] && [ ! -z "$3" ]; then
if [ -f "$1"  ]; then
echo "$1"
echo "$(file "$1" -F"|"  )'|'$(xdg-mime query filetype "$1")'|'$(du -h "$1" |awk '{print $1}' )|$2|$3" >> info-mime-size-db.txt
else
echo The « "$1" » is not a valid file name.
fi
fi

このスクリプトは、path to file/file name | info about the file | mime type | size | filename | restored_filename のパターンでファイルを作成します。以下に例を示します:./recup_dir.1/f872690288_image.jpg|JPEG image data, JFIF standard 1.01|image/jpeg|24K|f872690288_image.jpg|image.jpg

リカバリ後のタスク

このスクリプトは、path to file/file name | info about the file | mime type | size | filename | restored_filename のパターンでファイルを作成します。以下に例を示します: ./recup_dir.1/f872690288_image.jpg|JPEG image data, JFIF standard 1.01|image/jpeg|24K|f872690288_image.jpg|image.jpg

警告:

echo コマンドを cpmkdir の前から削除してください。そうしないと、スクリプトは実際に何も復元せず、宛先に何が行われるかを示すだけになります。 echo コマンドを使って、ファイル名や宛先の設定が正しく表示されていることを確認するのは良い方法です。

これらのスクリプトは、 photorec で作成されたフォルダからファイルを復元するための例です。注意してください!

スクリプトの先頭

現在のディレクトリに info-mime-size-db.txt が存在するかどうかを簡単に確認する方法は以下の通りです。スクリプトの残りの部分で可能なエラーを防ぐためです。

#!/bin/bash
if [ -f info-mime-size-db.txt ]; then echo The file info-mime-size-db.txt exists continuing... ;
  else 
  echo Error!! the info-mime-size-db.txt file cannot be found;exit 1; 
fi

変数の開始

CountAll="0"
CountToLimit="0"
BaseSubDirName="MyRestoredFiles"
Destination="$HOME/NameOfBaseFolder/${BaseSubDirName}-MoreDetailsInFolderName/"
NewDirNumber="0"
CountToLimit="0"

配列にデータを追加

警告: 配列は info-mime-size-db.txt ファイルからデータを読み込むことで追加されます。そうでない場合、スクリプトは正しく動作しません!
while ループを使った方法

ここでは、awkgrep、および sed の代わりに bash standard expressions を使用して、ファイルからパターンを持つ配列を高速化する方法について簡単な例を示します。ArrayOfFiles 配列にはファイルへの完全なパスが含まれ、ArrayOfsorted には photorec によって復元された元の名前が含まれますが、ランダムに生成された部分は含まれません。

WhileArray=0;
while read i; do
if [[ "$i" =~ "gif" ]]||[[ "$i" =~ "jpeg" ]];then
ArrayOfFiles[WhileArray]=${i/'|'*/}
ArrayOfsorted[WhileArray]=${i/[^*|]*|/}
WhileArray=$((WhileArray+1));
fi;
done <  info-mime-size-db.txt
echo done, the array is full

復元のためのループ

これは、ファイルの復元を管理するスクリプトの最後の部分です。宛先のサブディレクトリにファイルが一定数たまると、宛先フォルダに新しい番号付きサブディレクトリを作成し、そこにファイルをコピーし続けます。

SizeOfArray=${#ArrayOfFiles[@]}
while [  "${SizeOfArray}" != "${CountAll}" ]; do

IfExist="${Destination}${BaseSubDirName}${NewDirNumber}"
if [ ! -d "${IfExist}" ]; then echo mkdir -v "${IfExist}" -p;fi

CountToLimit=$((CountToLimit+1 ))
FileName=${ArrayOfsorted[CountAll]}
    if [ $CountToLimit -gt 25 ]; then
CountToLimit="0"
NewDirNumber=$((NewDirNumber+1))
fi;
NewDestination="$IfExist"

echo cp -fv "$PWD/${ArrayOfFiles[CountAll]}" "${IfExist}${FileName}"
CountAll=$((CountAll+1))
done
ノート: ファイル名や宛先ディレクトリ名にファイルに関するより具体的な詳細を追加するには、外部プログラムを使用して情報を収集する必要があります。例えば、画像の解像度については、feh feh -l "${ArrayOfFiles[$CountAll]}" | tail -1 | awk '{print $3"x"$4}'imagemagick identify ${ArrayOfFiles[$CountAll]} | awk '{print $3}' などがあります。

ファイルが十分に少ない場合

同じ拡張子を持つファイルがそれほど多くない場合、find -name *.xcf -exec copy "{}" $HOME/Desktop ; のようなものを使用するだけで十分です。宛先フォルダの「オーバーロード」を避けるために、見つかったファイルの数を計算できます find -type f -name *xcf | wc -l

ノート: photorec ユーティリティは、1つのフォルダに最大500個の回復ファイルを格納します。