Как всегда, необходимо прочитать страницу справочника команды, чтобы узнать, как она интерпретирует свои аргументы.
--
является наиболее часто используемым для указания на конец опций команды. Это особенно полезно, если Вы хотите передать имя файла или другой аргумент, который начинается -
. Это - также хорошая идея использовать его перед подстановочными знаками, которые могли бы расшириться до имени файла, начинающегося с дефиса. (Например, попробовать mkdir foo; cd foo; echo >-l; ls *; ls -- *
.)
Но git diff
также использование это, чтобы указать, является ли аргументом a <commit>
(указание, что пересмотр разности) или a <path>
(указание, который файл к разности). Это может обычно предполагать, но для значения возможно быть и допустимой фиксацией и допустимым путем. В этом случае можно использовать git diff foo --
указать на это foo
фиксация, или git diff -- foo
указать на это foo
путь.
В основанных на Linux операционных системах, которые могут быть сделаны с сетевыми блочными устройствами или устройствами картопостроителя устройства. Файл, который Вы получаете, является блочным устройством.
С nbd
:
ln -s /path/to/first-file file.0
...
ln -s /path/to/last-file file.19
nbd-server -C /dev/null -m 127.0.0.1:12345 file
sudo nbd-client localhost 12345 /dev/nbd0
(конкатенация /dev/nbd0
).
С картопостроителем устройства (размеры файла должны быть несколькими из 512):
sudo losetup /dev/loop0 file1
sudo losetup /dev/loop1 file2
s0=$(sudo blockdev --getsize /dev/loop0)
s1=$(sudo blockdev --getsize /dev/loop1)
printf '%s\n' "0 $s0 linear /dev/loop0 0" "$s0 $s1 linear /dev/loop1 0" |
sudo dmsetup create mybundle
(конкатенация /dev/mapper/mybundle
).
Вы в основном ответили на это в первом предложении вопроса: да, это может быть сделано. Однако необходимо было бы записать пользовательский драйвер файловой системы. Если это, как предполагается, объект файловой системы, это должно быть обработано ядром на некотором уровне (который включает FUSE). Драйвер должен был бы обеспечить бэкенд для стандартной файловой системы syscalls API (stat()
, open()
и т.д., включая поиск). Вы не можете сделать этого полностью в пространстве пользователя (по крайней мере, не с монолитным ядром - но даже с микроядром необходимо было бы все еще обеспечить драйвер файловой системы, хотя работая как регулярный процесс пространства пользователя).
Сегодня написал драйвер fuse, если кому-то интересно решение fuse. (маппер устройств, а также nbd-решение выше создадут блочные устройства, а не обычные файлы - что приведет к поломке, если вы захотите использовать полученный результат непосредственно с программами видеомонтажа или другими инструментами, которые не готовы читать из блочных устройств напрямую)