Короткий путь:
$ 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 , возможно, может динамически прикреплять образы дискет, но я не знаком с этим.
Вы можете сделать что-то вроде этого:
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
Вот команда, которую я использовал:
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
), если нет, удаляет временный файл.