Tanto touch
como >
criarão um novo arquivo se ele não existir. Como os seguintes comandos de terminal mostram quando você touch
um arquivo existente, o acesso / hora da última modificação é atualizado. Mas se você >
para um arquivo existente for truncado e a hora da última modificação for atualizada (o tempo de acesso não é). Observe que >
não exclui / desvincula o arquivo. O inode permanece o mesmo - e é por isso que >
/ ou truncate
são comumente usados para limpar arquivos de log, mesmo com um identificador de arquivo aberto.
rick@dell:~$ > EmptyFile
rick@dell:~$ touch EmptyFile2
rick@dell:~$ ls Empty*
EmptyFile EmptyFile2
rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2
rick@dell:~$ echo Hello > EmptyFile
rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 6 Sep 29 20:28 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2
rick@dell:~$ > EmptyFile
rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 0 Sep 29 20:28 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2
rick@dell:~$ echo Hello > EmptyFile
rick@dell:~$ touch EmptyFile
rick@dell:~$ ls -l Empty*
-rw-rw-r-- 1 rick rick 6 Sep 29 20:32 EmptyFile
-rw-rw-r-- 1 rick rick 0 Sep 29 20:27 EmptyFile2
Como mencionado nos comentários, touch
é um comando externo e só opera em arquivos. >
é um recurso interno do shell que serve a muitos propósitos diferentes. Normalmente, você o veria como cat source.fil > target.fil
.
Um formulário longo para esvaziar um arquivo seria:
cat /dev/null > emptyme.fil
Usar > emptme.fil
realiza a mesma coisa em um formato compacto de redirecionar nada para o arquivo.