como eu uso o tar -C no Snow Leopard ao criar um arquivo?

4

Os estados da página principal

-C directory
      In c and r mode, this changes the directory before adding the following files.

No entanto, o tar não é alterado para o diretório especificado, mas, em vez disso, é relatado

tar: <folder name>: Cannot stat: No such file or directory

para todas as pastas no diretório em que eu executo o comando tar.

Eu realmente tenho que fazer algo como

cd <folder> && tar ... && cd -

ou há uma maneira de conseguir esse trabalho?

    
por ssc 06.06.2010 / 08:59

3 respostas

2

Eu acho que você não pode usar a opção -C como você presume nesta pergunta.

A seção 6.10.1 Changing the Working Directory no manual GNU para tar descreve a opção -C como essa,

To change the working directory in the middle of a list of file names, either on the command line or in a file specified using ‘--files-from’ (‘-T’), use ‘--directory’ (‘-C’). This will change the working directory to the specified directory after that point in the list.

‘--directory=directory’
‘-C directory’

Changes the working directory in the middle of a command line.

For example,

$ tar -c -f jams.tar grape prune -C food cherry

will place the files ‘grape’ and ‘prune’ from the current directory into the archive ‘jams.tar’, followed by the file ‘cherry’ from the directory ‘food’. This option is especially useful when you have several widely separated files that you want to store in the same archive.

Note that the file ‘cherry’ is recorded in the archive under the precise name ‘cherry’, not ‘food/cherry’. Thus, the archive will contain three files that all appear to have come from the same directory; if the archive is extracted with plain ‘tar --extract’, all three files will be written in the current directory.

Existem mais alguns exemplos na página de manual ...

Atualização:
Eu geralmente não misturo arquivos de caminhos diferentes em uma única tarball.
No entanto, se é isso que você deseja, há duas coisas que podem ser feitas,

  1. Use a opção -T com uma lista de diretórios / arquivos que você deseja compactar juntos.
    Isso reunirá todas as coisas junto com prefixos de caminho extras.
  2. Use a opção -h em um diretório "link image"
    (você faz um daqueles com um script para criar links para arquivos e diretórios de interesse em um diretório novo e vazio)
    A opção -h usada em tal diretório criará uma única tarball que representa o layout do arquivo nesse diretório.
por 06.06.2010 / 09:12
1

Pessoalmente, prefiro usar subshells para colocar tar em "position". Eu nunca aprendi a opção -C , então não sei como isso funciona.

Suponha que meu CWD seja / path / a , e quero criar um tarball de / caminho / b / foo sem o caminho principal / path / b :

user@host:/path/a$ ( cd /path/b && tar czf ~/tarball.tgz foo )
user@host:/path/a$

O tarball resultante contém o diretório foo / e todo o seu conteúdo, mas não o principal / path / b . O subshell executa o cd , então o tar se o cd for bem sucedido, então sai de volta para o meu shell original no mesmo CWD.

    
por 06.06.2010 / 09:08
1

tar -C não funciona com curingas porque, como Henno afirmou em um dos comentários:

* will be expanded by the shell based on your current directory, before it's handed to tar

Então, se você está tentando fazer algo como:

tar -cvzf myfile.tgz -C somepath *

Não vai funcionar. Tanto quanto eu posso dizer que você terá que mudar de diretório primeiro, como Quack Quixote sugere.

    
por 03.11.2012 / 20:40