「リカバリ後のタスク」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (英語版より新規作成) |
Kusanaginoturugi (トーク | 投稿記録) |
||
26行目: | 26行目: | ||
f851733136_WindowMaker_Dockapps.pdf|WindowMaker_Dockapps.pdf|./f851733136_WindowMaker_Dockapps.pdf|272cc4fcdc8027e3b8b53318f08f3f01 |
f851733136_WindowMaker_Dockapps.pdf|WindowMaker_Dockapps.pdf|./f851733136_WindowMaker_Dockapps.pdf|272cc4fcdc8027e3b8b53318f08f3f01 |
||
+ | === ファイル名を整理して並べる === |
||
− | === Clean up and sort file names === |
||
+ | 宛先のファイル名をより ''bash'' に使いやすくするために、特殊な記号やスペースを削除し、重複した名前を持つファイルのよりよい概要のために2番目の列でソートすることができます。重複したファイル名には、''restored_filename'' の前に {{ic|¤}} を区切り記号として加えられます。スクリプトは、上記で作成したスクリプトによって作成されたファイルを使用し、結果を ''stdout'' に出力します。 |
||
− | To make destination file names more ''bash'' friendly you can remove special symbols, spaces and sort by second column for a better overview of duplicate names with different checksums. To the duplicate file names will be added a number with {{ic|¤}} as a separator in front of the ''restored_filename''. The script will use file created by script from above and print result to ''stdout''. |
||
{{hc|clean_and_sort.sh|<nowiki> |
{{hc|clean_and_sort.sh|<nowiki> |
||
50行目: | 50行目: | ||
</nowiki>}} |
</nowiki>}} |
||
+ | ファイル名に特殊記号が含まれている場合、特にそれらがファイル名の先頭にある場合は、クォートやバックスラッシュ {{ic|}} を使用しないと、{{ic|mv}} や {{ic|cp}} のようなコマンドで管理するのが難しくなりますが、それらをすべて削除する代わりに、[http://www.obkb.com/dcljr/charstxt.html HTML hex codes] で置き換えることができます。 |
||
− | File names with special symbols especially if file names begins with them are harder to manage with commands like {{ic|mv}} or {{ic|cp}} without using quotes or backslash {{ic|\}} but if you want to keep information about them then they can be replaced with [http://www.obkb.com/dcljr/charstxt.html HTML hex codes] instead of removing all of them. |
||
== Photorec == |
== Photorec == |
2023年4月6日 (木) 13:56時点における版
関連記事
目次
チェックサムで一意なファイルのみをリストする
ファイルが復元されると、多くのファイルが同じ ハッシュ値 を持つ場合があります。重複するファイルの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
ファイル名に特殊記号が含まれている場合、特にそれらがファイル名の先頭にある場合は、クォートやバックスラッシュ を使用しないと、
mv
や cp
のようなコマンドで管理するのが難しくなりますが、それらをすべて削除する代わりに、HTML hex codes で置き換えることができます。
Photorec
Creation of a file with data for arrays
In this example the xdg-mime is used to gather information about the mime types but the file --mime-type -b
and file -i -b
commands does the same output as the xdg-mime query filetype
command, with more or less details. This script will collect a lot of more additional information about the files into the info-mime-size-db.txt. Put the script in the destination directory that you used in photorec, make it executable and use path to files from the list with unique checksums described from above. e.g. 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
The script will build a file with pattern path to file/file name | info about the file | mime type | size | filename | restored_filename, here is an example:./recup_dir.1/f872690288_image.jpg|JPEG image data, JFIF standard 1.01|image/jpeg|24K|f872690288_image.jpg|image.jpg
Post recovery tasks
This will help you more to understand the script and make your own scripts base on it. You can also put all necessary parts together into a script, modify patterns for files to search and run it. You need to create a database file with name info-mime-size-db.txt
with information about files.
Head of the script
Here is a simple check if the info-mime-size-db.txt
exists in the current directory to prevent possible errors with rest of the script.
#!/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
Start variables
CountAll="0" CountToLimit="0" BaseSubDirName="MyRestoredFiles" Destination="$HOME/NameOfBaseFolder/${BaseSubDirName}-MoreDetailsInFolderName/" NewDirNumber="0" CountToLimit="0"
Populate an array
With a while loop
Here will be a short examples about how to speed up population of the array from a file with patterns by using bash standard expressions instead of awk, grep and sed. The ArrayOfFiles
array will contain full path to the file and the ArrayOfsorted
will contain original names restored by photorec but without random generated part.
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
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.
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
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 find -name *.xcf -exec copy "{}" $HOME/Desktop \;
to avoid the overload of a destination folder you can calculate how many files are found find -type f -name *xcf | wc -l
.