hardlink / softlink vários arquivos para um arquivo

3

Eu tenho muitos arquivos em uma pasta. Eu quero concatenar todos esses arquivos para um único arquivo. Por exemplo, cat * > arquivo final; Mas isso aumentará o espaço em disco e também consumirá tempo. Existe uma maneira onde eu posso ligar / linkar todos os arquivos para o final_file? Por exemplo, ln * final_file.

    
por quartz 31.07.2013 / 21:59

3 respostas

5

Com links, receio, isso não será possível. No entanto, você pode usar um pipe nomeado. Exemplo:

# create some dummy files
echo alpha >a
echo beta  >b
echo gamma >c

# create named pipe
mkfifo allfiles

# concatenate files into pipe
cat a b c >allfiles

A última chamada será bloqueada até que algum processo seja lido no pipe e saia. Para uma operação contínua, pode-se usar um loop, que aguarda que um processo leia e inicie novamente.

while true; do
  cat a b c >allfiles
done
    
por 31.07.2013 / 22:09
2

Isso não é possível.

N arquivos significam N inodes. Links rígidos, por definição, são simplesmente nomes diferentes para o mesmo inode. Links simbólicos são arquivos que apontam para um certo inode (seu alvo). De qualquer maneira, suave ou difícil, o link pode se referir a um único inode.

    
por 31.07.2013 / 22:05
2

De um jeito direto, não ... Você não pode link hard / soft para um único arquivo. links são nada mais e nada menos que ponteiro de um arquivo para outro.

Agora, se você estiver preocupado com espaço e quiser liberar o espaço, faça o seguinte:

for i in *
do
    cat < "$i" >> destination_file &&
      rm -f -- "$i"
done

Basicamente, ele anexará a saída a destination_file e removerá o arquivo posteriormente. Também estou assumindo que você não precisa dos arquivos originais.

    
por 31.07.2013 / 22:07