Например, у меня четыре штуки (1.txt
, 2.txt
, 3.txt
, 4.txt
) и когда объединяются вместе (all.txt
), вот файл, который я хочу:
cat 1.txt 2.txt 3.txt 4.txt > all.txt
Однако я не хочу создавать настоящий файл (all.txt
), потому что он может быть очень большим или очень медленным. Однако некоторые программы или программное обеспечение принимают в качестве аргумента только один файл. (например, sh all.txt
знак равно sh 1.txt && sh 2.txt && sh 3.txt && sh 4.txt
)
Как сделать такой виртуальный файл? Или как относиться к ним как к одному файлу?
Кто-то задал здесь аналогичный вопрос, однако у меня ограниченные права доступа на моем компьютере, и losetup запрещен.
Одно из множества решений - использовать конвейеры FIFO:
$ mkfifo my_virtual_file.txt
$ cat 1.txt 2.txt 3.txt 4.txt > my_virtual_file.txt &
$ my_command my_virtual_file.txt
$ rm my_virtual_file.txt
Это может работать или не работать в зависимости от того, что my_command
работает с файлом: как и в некоторых других решениях, если ему нужно искать в файле (то есть произвольно перемещаться вперед и назад по содержимому), тогда это не удастся; вместо этого, если он просто читает файл построчно, например, это сработает.
Конечно, контент доступен только для чтения, команда не сможет писать в него (или, по крайней мере, это не будет работать должным образом).
Замена процесса в bash (и некоторых других оболочках).
./someprogram <(cat {1..4}.txt)