В зависимости от того, что вы пытаетесь восстановить, вы можете попробовать cat sd128.img | strings [options] | grep -C10 [pattern for recovery]
. Хотя это довольно ужасно. Но может дать вам зацепку, где ваши данные могут начаться.
Эта страница в Forensic Wiki , посвященная твердотельным накопителям, может быть полезной для прочтения, хотя она в основном посвящена сложности FTL(слоя перехода флэш-памяти ), который отображает систему -видимое блочное устройство для множества микросхем памяти в SSD и автоматически выполняет -выравнивание износа, отслеживание неисправных -блоков, фоновую оптимизацию и т. д.
Комментарий steeldriver почти наверняка определяет часть проблемы. Если вы «изменили код на \.cdg$|\.CDG$|\.mp3$|\.MP3$
и это не повлияло на мои результаты", значит, вы сделали это неправильно — конкретно, вы сделали это не полностью. Часть проблемы кроется в команде
cdg_name=$(unzip -Z1 "$i" | grep -E -- '.cdg|.CDG' | awk '{print substr($0,index($0,$1))}')
, который необходимо изменить на
cdg_name=$(unzip -Z1 "$i" | grep -E -- '\.cdg$|\.CDG$' | awk '{print substr($0,index($0,$1))}')
потому что cbscdge450-5-0068 - Carpenters …
соответствует .cdg
, и поэтому cdg_name
устанавливается на объединение обоих имен , разделенных новой строкой. Это совершенно ясно из сообщения об ошибке mv
.
Просто для упрощения можно изменить
unzip -Z1 "$i" | grep -E -- '\.cdg$|\.CDG$|\.mp3$|\.MP3$' | wc -l
-
unzip -Z1 "$i" | grep -Ec -- '\.cdg$|\.CDG$|\.mp3$|\.MP3$'
(с использованием опции c числаgrep
)или даже
unzip -Z1 "$i" | grep -Eci -- '\.cdg$|\.mp3$'
(с помощью опции i игнорировать регистрgrep
).
Вряд ли когда-либо есть основания говорить $(echo "something")
. На самом деле, я склонен сказать, что для этого никогда нет причин, но кто-то, вероятно, идентифицирует странный угловой случай, где это выгодно. В частности,
new_cdg_name="$(echo "${zip_name%.*}.cdg")"
new_mp3_name="$(echo "${zip_name%.*}.mp3")"
можно изменить на
new_cdg_name="${zip_name%.*}.cdg"
new_mp3_name="${zip_name%.*}.mp3"
Я мог бы даже изменить их на
base_name="${zip_name%.*}"
new_cdg_name="$base_name.cdg"
new_mp3_name="$base_name.mp3"
П.С. Строго говоря, кавычки выше не нужны, но это хорошая практика, чтобы использовать их все время если у вас нет веской причины не делать этого.
П.П.С. В неправильном контексте $(echo "something")
может делать такие вещи, как изменение Plan - I
на Plan - I
(т. е. сжать несколько пробелов в один ).
Рискуя быть политически некорректным, представьте, что вы — полиция, пытающаяся раскрыть преступление, и что все, что вы можете сделать, это сидеть возле штаба преступников с биноклем. Разве не было бы намного лучше, если бы вы могли получить прослушку или осведомителя, чтобы вы могли знать, что происходит внутри здания? Отладка похожа на попытку раскрыть преступление — пока внешняя информация (т. е. вывод zipinfo
и 7za
,работать отдельно )важно понять проблему, это действительно помогает получить внутреннюю информацию. Поэтому в качестве рутинного шага отладки я рекомендую добавлять операторы типа
printf 'cdg_name = [%s]\n' "$cdg_name"
printf 'mp3_name = [%s]\n' "$mp3_name"
к сценарию. Это сделало бы очевидным, что cdg_name
устанавливается к слиянию двух имен, и это может помочь вам отследить где I'd Do Anything
меняется на I\'d Do Anything
.
Строго говоря, это должен быть комментарий, но пока я здесь :с чего вы взяли, что имена файлов участников в пределах CB30035-05 - SIMPLE PLAN - I'D DO ANYTHING.zip
были
CB30035-05 - Simple Plan - I'd Do Anything.cdg
и CB30035-05 - Simple Plan - I'd Do Anything.mp3
когда вы не показали нам ни одной команды, которая показывает что-либо между Plan
и I
?
Как я упоминал выше, I\'d Do Anything
— это головоломка. Но есть ли у вас на самом деле какие-либо примеры проблем связанные с запятыми, обратными кавычками или не -символами ASCII (например, ‘é’, ‘Φ’, ‘Ø’, ‘θ’, ‘½’ или ‘∞’ )?