Você não pode usar file1 > file2 para copiar o conteúdo de file1 para file2 porque não há comando lá. Você tem que emitir algum comando.
- Os redirecionamentos se aplicam a (1) um comando executado ou (2) o shell como um todo (se aplicado ao
execbuiltin). Mas eles funcionam alterando a origem ou o destino das ações que executam operações de entrada - ou seja, que leem ou gravem em um arquivo ou dispositivo. Você tem que realmente realizar alguma ação. -
file1 > file2é um comando válido, sob algumas circunstâncias, mas não copiafile1parafile2. Em vez disso, como l0b0 diz , ele tenta executarfile1como um programa ou script, e - quer isso tenha sucesso ou não - envia o resultado padrão da execução defile1para %código%. (Sefile2for um arquivo regular, ele será sobrescrito). -
É tentador pensar que algo como
file2funcionaria. Mas isso não acontece: quando você deixa o comando, nenhuma operação é executada.<file1 >file2é usado como entrada efile1é usado como saída ... mas como nada é realmente feito , a saída está vazia, o único efeito é (a) criarfile2se ele já não existe ou (b) criefile2empty se ele existir:ek@Ilex:~$ echo foobar > file1 ek@Ilex:~$ echo quux > file2 ek@Ilex:~$ cat file1 foobar ek@Ilex:~$ cat file2 quux ek@Ilex:~$ <file1 >file2 ek@Ilex:~$ cat file2 ek@Ilex:~$ file file1 file2 file1: ASCII text file2: empty
Você provavelmente só quer executar file2 .
Assumindo, isto é, que cp file1 file2 é um arquivo regular (ou não existe, mas você quer que ele exista como um arquivo regular após a execução do seu comando), provavelmente você deve simplesmente usar o file2 comando.
Como Sylvain Pineau diz , você pode usar cp também. No entanto, o comando cat file1 > file2 é bem comportado ao gravar em um arquivo que já existe: ele sobrescreve o destino com a origem, mas mantém o original permissões de máscara (e, portanto, é bom mesmo em situações em que alguém pode pensar intuitivamente cp foram necessários):
ek@Ilex:~$ echo glockenspiel > file1
ek@Ilex:~$ echo flugelhorn > file2
ek@Ilex:~$ cat file1
glockenspiel
ek@Ilex:~$ cat file2
flugelhorn
ek@Ilex:~$ chmod +x file2
ek@Ilex:~$ ls -l file1 file2
-rw-rw-r-- 1 ek ek 13 Sep 16 03:28 file1
-rwxrwxr-x 1 ek ek 11 Sep 16 03:28 file2
ek@Ilex:~$ cp file1 file2
ek@Ilex:~$ cat file2
glockenspiel
ek@Ilex:~$ ls -l file1 file2
-rw-rw-r-- 1 ek ek 13 Sep 16 03:28 file1
-rwxrwxr-x 1 ek ek 13 Sep 16 03:28 file2
Para acrescentar , você provavelmente quer um redirecionamento (diferente).
Tanto o comando cat file1 > file2 quanto o redirecionamento com cp irão sobrescrever o conteúdo de um arquivo regular, se existir. Mas > redireciona os anexos.
Portanto, se você quiser acrescentar o conteúdo de >> a file1 em vez de substituir file2 pelo conteúdo de file2 , um redirecionamento com file1 ( não >> ) é uma boa escolha:
ek@Ilex:~$ echo 'Violets are blue.' > file1
ek@Ilex:~$ echo 'Roses are red.' > file2
ek@Ilex:~$ cat file1
Violets are blue.
ek@Ilex:~$ cat file2
Roses are red.
ek@Ilex:~$ cat file1 >> file2
ek@Ilex:~$ cat file2
Roses are red.
Violets are blue.