Сделать все файлы (которые находятся в разных папках) в одном файле - PullRequest
0 голосов
/ 22 апреля 2020

Я пытался сделать что-то конкретное c, используя для циклов, и мне нужна ваша помощь.

У меня есть разные папки с разными именами, такие как GCF_A1 GCF_C4 GCF_R3 ... и т. Д.

В каждой папке есть множество файлов с разными именами, например GCF444444 GCF00001RR GCF1000FF ... и т. д.

Я хочу сделать все файлы GCF4444 (в формате gz и в разных папках) в одном файле.

Например, если в каждой из 5 папок есть файл, который я хочу скопировать, то я хочу, в конце концов, иметь один файл, который содержит все содержимое пяти файлов в разных папках.

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Я не уверен, что именно вы спрашиваете, но отвечает ли это на это?

find /path/to/parent/dir -name GCF4444 -print0 |xargs -0 cat > GCF4444.gz

Это, вероятно, не имеет никакого смысла, но вопрос не совсем ясен о том, что вы хотеть. Это просто слепо объединяет каждый файл, полное имя которого GCF4444, в любом порядке, в котором они найдены. (Gzip надежен, и отдельные файлы gzip могут объединяться вместе без проблем. Дополнительные заголовки очень малы, что вы можно удалить, изменив конец на |xargs -0 zcat |gzip -9 > GCF4444.gz)

В противном случае, возможно, вы захотите сохранить иерархию:

cd /path/to/parent/dir
find . -name GCF4444 -print0 |xargs -0 tar -pcf GCF4444.tar

Это создаст файл GCF4444.tar на верхнем уровне родительский каталог. Он будет содержать каждый файл GCF4444 в структуре вложенных каталогов. Я не использовал tar -z, потому что вы указали, что содержимое файла уже распаковано (результирующий файл, вероятно, будет немного больше).

0 голосов
/ 22 апреля 2020

Это, вероятно, будет выглядеть примерно так:

 find <base_path_of_your_zips> -type f -name "*.gz" -exec cat {} \path\to\single\zippedfile.gz \;
...