2010-08-20 5 views
2

Je veux vider 3 fichiers ou les générer s'ils n'existent pas. La commande suivante est-elle correcte?générer des fichiers vides

> myone.txt > mytwo.txt > mythree.txt 

ou y a-t-il un meilleur moyen?

Répondre

3

Vous pouvez utiliser la touche tactile pour créer des fichiers vides s'il n'y en a pas. Dans le cas contraire, ce que vous faites est bien

>file1 >file2 
1

Non, pas de la coque. La lecture du système généré appelle pour cela, il est aussi très efficace pour une commande du shell:

[email protected]:~$ strace bash -c '> a > b > c' 
... 
open("a", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3 
fcntl64(1, F_GETFD)      = 0 
fcntl64(1, F_DUPFD, 10)     = 10 
fcntl64(1, F_GETFD)      = 0 
fcntl64(10, F_SETFD, FD_CLOEXEC)  = 0 
dup2(3, 1)        = 1 
close(3)        = 0 
open("b", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3 
fcntl64(1, F_GETFD)      = 0 
fcntl64(1, F_DUPFD, 10)     = 11 
fcntl64(1, F_GETFD)      = 0 
fcntl64(11, F_SETFD, FD_CLOEXEC)  = 0 
dup2(3, 1)        = 1 
close(3)        = 0 
open("c", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3 
fcntl64(1, F_GETFD)      = 0 
fcntl64(1, F_DUPFD, 10)     = 12 
fcntl64(1, F_GETFD)      = 0 
fcntl64(12, F_SETFD, FD_CLOEXEC)  = 0 
dup2(3, 1)        = 1 
close(3) 
1

J'utilise habituellement touch pour créer des fichiers vides. Il est généralement converti en utilitaire pour mettre à jour les horodatages, mais crée également le fichier nommé s'il n'existe pas.

+0

Va-t-il vider le contenu du fichier si le fichier existe déjà? – shantanuo

+0

no. ce ne sera pas – ghostdog74

+0

Hmm, bon point. Je viens d'attraper la partie 'générer' de la question ... – JAL

1

Alternative toucher utilise dd qui peut être utilisé pour tronquer les fichiers existants,

dd if=/dev/null of=moo count=0 
1

Une chose que vous ne pouvez pas faire avec > est quelque chose comme >file{0..9} ou >file{foo,bar,baz}. Toutefois, si votre système a truncate vous pouvez le faire:

truncate --size 0 file{0..9} 
truncate --size 0 file{foo,bar,baz} 

En utilisant différents arguments avec --size vous pouvez réduire ou étendre un fichier, mais il ne vide pas la première sauf si vous utilisez 0 pour la taille (en le premier de deux passages, par exemple). Les fichiers étendus sont complétés avec des valeurs nulles.

Questions connexes