I found a bash script online для массового восстановления файлов с использованием Sleuthkit, но у меня возникли проблемы с его использованием из-за того, что я считаю ошибкой самого скрипта. Вот сценарий:Bash Script: Mass Restore Files with Sleuthkit
IMAGE=$1
LIST=$2
DEST=$3
cat $LIST | while read line; do
filetype=`echo "$line" | awk {'print $1'}`
filenode=`echo "$line" | awk {'print $2'}`
filenode=${filenode%:}
filename=`echo "$line" | cut -f 2 -d ' '`
if [ $filetype == "r/r" ]; then
echo "$filename"
mkdir -p "`dirname "$DEST/$filename"`"
icat -f ext2 -r -s $IMAGE "$filenode" > "$DEST/$filename"
fi
done
Все отлично работает не до cut
заявления, которое выдает эту ошибку:
cut: the delimiter must be a single character
Очевидно, что скрипт пытается использовать строку как разделитель, который команда вырезать не делает позволять. Однако это необязательно, так как вывод фактически разделен на вкладку. Однако удаление разделителя вызывает это сообщение об ошибке:
[: 16: r/r: unexpected operator
Для каждой линии. Входной (файл LIST) выглядит следующим образом:
r/r 8457-128-3: Architects list.docx
r/r 90219-128-4: ACID Pro 7.0 Projects/Track 2 - 3.sfk
r/r 90208-128-4: ACID Pro 7.0 Projects/Track 2 - 3.wav
r/r 192969-128-3: OLD SCHOOL PAPERS/Doc Comp.docx
Выход awk {'print $1'}
является один или другой из этих двух линий:
r/r
d/d
Выход awk {'print $2'}
является файл дескрипторы, как это :
134164-128-1:
233761-128-1:
129177-128-1:
23963-128-1:
Мои подозрения в том, что двоеточие (:) была проблема, так что я удалил его по конвейеру filenode к sed
утверждение, что избавилась от сотрудничества lon, но это также не устранило проблему. Таким образом, после изменения этой линии, чтобы восстановить первый вопрос:
filename=`echo "$line" | cut -f 2 -d ' '`
To:
filename=`echo "$line" | cut -f 2`
И даже после удаления толстой кишки из числа файлов индексных дескрипторов, я до сих пор застрял с этой ошибкой:
[: 16: r/r: unexpected operator
Сценарий был написан для файловой системы ext2, но я использую его в файловой системе NTFS. Я изменил необходимые строки и могу заставить команду icat
работать как написанный, поэтому не проблема в том, чтобы не изменять соответствующие части (отдельные линии работают нормально, я отлаживал это, а также знаю, как).
Вот мой текущий сценарий:
IMAGE=/dev/sdb
LIST=files.lst
DEST=~/Desktop/sol/backup
cat $LIST | while read line; do
filetype=`echo "$line" | awk {'print $1'}`
filenode=`echo "$line" | awk {'print $2'}`
filenode=${filenode%:}
filename=`echo "$line" | cut -f 2`
if [ $filetype == "r/r" ]; then
echo "$filename"
mkdir -p "`dirname "$DEST/$filename"`"
icat -f ntfs -o 409600 -r -s $IMAGE "$filenode" > "$DEST/$filename"
fi
done
Так что это все об устранении неполадок и мышления, я сделал до сих пор. Есть идеи?
UPDATE
меня попросили показать выход cat -vte $LIST
, который выглядит следующим образом (пример):
r/r 284268-128-4:^IVirtualDJ/Skins/VirtualDJ 7 (6 Decks).zip$
r/r 284265-128-4:^IVirtualDJ/Skins/VirtualDJ5.zip$
d/d 284231-144-6:^IVirtualDJ/Tracklisting$
r/r 284345-128-4:^IVirtualDJ/Tracklisting/2013-06-21.m3u$
d/d 15695-144-1:^IMy Music$
r/r 14970-128-3:^IDemotivational pics.docx$
r/r 1677-128-1:^Idesktop.ini$
r/r 881-128-4:^IDocument 1.doc$
Кстати, ваш вопрос уже хорошо документирован, и я тоже его поддержал – anubhava
Могут ли двоеточия быть проблемой? – Dan
Давайте продолжим обсуждение в чате (http: //chat.stackoverflow.com/rooms/41989/discussion-between-dan-and-anubhava) – Dan