Конкатенация тысяч файлов:> по сравнению с>>

Локаль Unix не имеет никакого значения для программ, работающих в ВИНЕ. Необходимо настроить winodws в вине для русского языка.

6
23.05.2017, 15:40
3 ответа

Второй пример:

find . -name '*.txt' -print0 | xargs -0 cat > out.txt

Абсолютно законно и воссоздаст файл, out.txt каждый раз это выполняется, в то время как первое конкатенирует к out.txt если это работает. Но обе команды делают по существу то же самое.

То, что путает проблему, xargs -0 cat. Люди думают что перенаправление к out.txt часть той команды, когда это не. Перенаправление происходит после xargs -o cat взял вход на пути STDIN, и затем cat'ing, которые производят как единый поток к STDOUT. xargs оптимизирует cat'ing файлов не их вывод.

Вот является пример такими шоу, что я говорю. Если мы вставляем a pv -l промежуточный xargs -0 cat и вывод в файл out.txt мы видим, сколько записала кошка строки.

Пример

Для показа этого, я создал каталог с 10 000 файлов в нем.

for i in `seq -w 1 10000`;do echo "contents of file$i.txt" > file$i.txt;done

Каждый файл выглядит подобным этому:

$ more file00001.txt 
contents of file00001.txt

Вывод от pv:

$ find . -name '*.txt' -print0 | xargs -0 cat | pv -l > singlefile.rpt
  10k 0:00:00 [31.1k/s] [  <=> 

Как мы видим, 10k строки были выписаны к моему singlefile.rpt файл. Если xargs передавали нас блоки вывода, затем мы будем видеть, что сокращением количества строк, которые представлялись pv.

14
27.01.2020, 20:20

Какова цель наличия этих двух операторов затем?

Это - легкое: Поскольку существуют различные варианты использования. Иногда полезно усечь конечный файл для калибровки 0 первых, иногда (например, файлы журнала), имеет больше смысла добавлять данные в файл.

В этом случае не имеет никакого смысла добавлять. Вы хотите файл с точно содержанием файлов, которые Вы выбрали и не "файл с любыми данными вначале и содержанием выбранных файлов в конце".

5
27.01.2020, 20:20

Я пошел бы со вторым. Перенаправление stdout поймано ударом, когда Вы совершаете нападки, входят, таким образом, это не похоже на Вас, создают новое перенаправление для каждой строки find/xargs (который, возможно, был их взглядами). Если out.txt не существует они должны быть идентичными, если это уже имеет данные, затем второй, по крайней мере, сбрасывает файл к известному содержанию (то есть, никакому содержанию).

2
27.01.2020, 20:20

Теги

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