Назад | Перейти на главную страницу

Объединение текстовых файлов в виртуальный файл (или программу) в Linux

Например, у меня четыре штуки (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 запрещен.

Объединение файлов в виртуальный файл в Linux

Одно из множества решений - использовать конвейеры 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)