Несжатые файлы по содержимому сжаты дважды по ошибке

Короткий путь:

$ qemu-system-x86_64 -fda /path/to/floppy.img

Я слышал об опциях строки команды -QEMU, подобных этой, описанной как "удобные флаги".

Долгий путь:

$ qemu-system-x86_64 -drive file=/path/to/floppy.img,index=0,if=floppy,format=raw

Эта опция явно устарела .

«Современный» способ:

$ qemu-system-x86_64 -blockdev driver=file,node-name=f0,filename=/path/to/floppy.img -device floppy,drive=f0

Обратите внимание, что устройства, подключенные таким образом, как правило, плохо взаимодействуют со старыми функциями QEMU, такими как флаг -snapshotи команда монитора change.

На -мушке -:

(qemu) change floppy0 /path/to/floppy.img

Это команда монитора для управления съемными носителями после того, как эмулятор уже запущен. info blockнапечатает имя гибкого устройства, если его имя не "floppy0".


Другое (? )способы:

Дополнительные идеи см. в онлайн-руководстве и в -дереве документации . QMP , возможно, может динамически прикреплять образы дискет, но я не знаком с этим.

1
29.04.2021, 20:49
2 ответа

Вы можете сделать что-то вроде этого:

for file in *; do 
    zcat -- "$file" | 
        file - | 
            grep -wq compressed && 
                gunzip -- "$file"
done

Это имеет то преимущество, что может работать с произвольными именами файлов (в отличие от вашего подхода с ls, см. http://mywiki.wooledge.org/ParsingLs), и это также кажется значительно проще. На мой взгляд, по крайней мере.

Недостатком является то, что вы можете получить сжатые gzip-файлы без расширения .gz. Но это достаточно легко исправить:

for file in *; do 
    case "$file" in 
        *.gz) ;; 
        *) file -- "$file" | 
            grep -wq compressed && 
                mv -v -- "$file" "$file".gz;; 
    esac
done
1
28.07.2021, 11:36

Вот команда, которую я использовал:

ls | xargs -L1 -I[] sh -c 'basename "[]" | xargs -L1 -I{} sh -c "cp -a \"[]\" \"/tmp/{}.gz\" && gzip -d \"/tmp/{}.gz\" && file \"/tmp/{}\" | (grep compressed -q && rsync -a \"/tmp/{}\" \"[]\" --remove-source-files) || rm \"/tmp/{}\""'

Он просто копирует файл в /tmp/, распаковывая его один раз, проверяет, сжат ли этот новый файл (file some_file | grep compressed -q), если да, перемещает его обратно в исходное местоположение (rsync source dest --remove-source-files), если нет, удаляет временный файл.

0
28.07.2021, 11:36

Теги

Похожие вопросы