2010-01-11 10 views
0

HI,Comment convertir un fichier à zéro octet?

Dans unix, il y a un certain nombre de fichiers dans mon répertoire. Je veux changer tous les fichiers en fichiers de zéro octet. est-ce possible sur une seule ligne de commande?

par exemple:

-rw-r--r-- 1 sumanma dev   434 Jan 8 14:36 pprbc_NL.cpp 
-rw-r--r-- 1 sumanma dev   488 Jan 8 14:37 pprbc_TreeBuild.cpp 
-rw-r--r-- 1 sumanma dev   783 Jan 8 14:37 pprbc_UPDwm.cpp 

je veux changer ces à

-rw-r--r-- 1 sumanma dev   0 Jan 8 14:36 pprbc_NL.cpp 
-rw-r--r-- 1 sumanma dev   0 Jan 8 14:37 pprbc_TreeBuild.cpp 
-rw-r--r-- 1 sumanma dev   0 Jan 8 14:37 pprbc_UPDwm.cpp 

J'utilise tcsh

+0

connexes: http://superuser.com/questions/90008/how-to-clear-the-contents-of-a-file-from-the -command-line – dmckee

Répondre

4

Oui, vous pouvez.

Essayez cette

for i in * 
do 
echo -n > $i 
done 

(En supposant bash ici, mais l'idée de base est l'écho).

Édition: Une doublure (bash). Vous aurez besoin des points-virgules etc. dont vous n'aurez pas besoin dans la version multiligne.

for i in * ; do echo -n > $i ; done 

Modifier: Si vous êtes coincé à l'aide tcsh, vous pouvez toujours appeler bash pour exécuter une seule ligne comme si

bash -c 'for i in * ; do echo -n > $i ; done' 
+0

comme je l'ai dit j'ai besoin sur la ligne de commande ce n'est pas si utile. Je peux écrire le script mais je veux savoir quel est le truc de la ligne de commande pour cela. – Vijay

+1

Tapez cela comme un seul ligne dans la ligne de commande et cela fonctionnera comme vous voulez. Vous n'avez pas à en faire un script. –

+0

'pour i dans test * fdef do echo -n> $ j'ai terminé i: Variable indéfinie. ' – Vijay

2

Je ne peux pas immédiatement penser à une seule ligne facile pour tcsh.

Voici trois-liner:

foreach i (*) 
    cat /dev/null > $i 
end 

Vous pouvez taper ceci dans la ligne de commande, à savoir, il ne doit pas être un script. Malheureusement, à la différence des sh-series, les coques dérivées de csh analysent les structures de contrôle par ligne et non par pipeline. Cela signifie que foreach i (*); echo $i; end ne fonctionnera pas.

Bien sûr, vous pouvez faire en une ligne en passant des coquilles pour une ligne:

sh -c 'for i in *; do cat /dev/null > $i; done' 
1
for file in * 
do 
    [ -f "$file" ] && >"$file" 
done 
+0

Ceci est un bon script sh mais il utilise un shell dérivé de csh, et cela ne fonctionnera pas du tout. – DigitalRoss

+0

ah, j'ai raté les commentaires – ghostdog74

0

Pour un fichier, vous pouvez utiliser

>file.cpp 

Pour plus d'un dont vous avez besoin une boucle for comme déjà décrit par d'autres. S'il existe un répertoire dans le répertoire en cours, vous recevez un message d'erreur.

for f in *;do >$f;done 

pour éviter cette utilisation

for f in *;do [ -f $f ] && >$f;done 
Questions connexes