Comment puis-je créer un fichier vide à partir de la ligne de commande?
Utilisez le touch
commande:
The touch utility sets the modification and access times of files to thecurrent time of day. If the file doesn't exist, it is created withdefault permissions.
Exemple:
touch newfile
> newfile
Sera également créer un fichier vide. Si le fichier existe déjà, il sera tronquer (vide). Pour conserver le contenu du fichier, utilisez >>
pour l'ajout comme dans:
>> file
Même si le fichier existe, le contenu sera intact.
Modifier: Si vous n'avez pas de contenu à taper, celui-ci est plus rapide:
user@host$ :> newfileuser@host$ :>> new_or_existing_file
Note. :
c'est le commandement ici. Cela ne fait pas partie de l'invite.
cat /dev/null > file1.ext
de la manière exacte, il y a aussi une autre façon
echo "" > file2.ext
La différence est file1.ext sera de zéro octet et file2.ext serait un octet. Vous pouvez vérifier cela en
ls -l file*.*
Utiliser vim
éditeur vous pouvez également créer un fichier vide.
vim filename
Puis enregistrez
:wq
Commande
echo -n > file
crée un fichier vide, si votre version de echo
prend en charge le commutateur-n.
Ou vous pourriez utiliser printf
printf '' > file
En général, créer n'importe quel régulier1 fichier sur Linux. open(2)
,openat(2)
, et creat(2)
appels système (et plus précisément avec O_CREAT
drapeau). Cela signifie que si vous appelez un utilitaire de ligne de commande qui effectue ces appels système, vous pouvez créer un nouveau fichier vide.
Le plus souvent, un nouveau nom de fichier est créé avec quelque chose comme ceci:
touch /tmp/new_file
: > /tmp/new_file
true > /tmp/new_file
-
> /tmp/new_file
(shell bash uniquement )
toucher est un utilitaire autonome. Son but initial est de mettre à jour l'heure d'accès et de modification d'un fichier, mais si le fichier n'existe pas, il sera créé. Notez également qu'un nom de fichier -
est traité spécialement, donc si vous voulez créer un fichier nommé littéralement -
, vous devrez l'inclure entre guillemets simples ou doubles.
Par contraste, >
est un opérateur de redirection shell pour flux de sortie standard. Le >
l'opérateur appelle spécifiquement le openat()
appel système avec O_WRONLY|O_CREAT|O_TRUNC
drapeau. Cela signifie que si le nom de fichier n'existe pas - il sera créé, et si c'est le cas-les données seront tronquées (et donc disparues, donc >
doit être utilisé avec précaution). Dans la plupart des coquilles de nos jours true
ou :
est un intégré, faisant ainsi : > /tmp/new_file
va être plus efficace, bien que marginalement comparé à touch /tmp/new_file
.
Mais bien sûr, cela ne s'arrête pas là. Comme mentionné, tout ce qui peut effectuer open()
, openat()
et, create()
les appels système créeront un fichier. Par conséquent, nous pouvons faire:
true|dd of=/tmp/newfile
truncate --size 0 /tmp/new_filename.txt
cp /dev/null /tmp/null_file
true|tee /tmp/some_other_file
-
mktemp
outempfile
(pour créer des fichiers temporaires qui n'ont pas besoin d'exister entre les redémarrages !)
Bien entendu, tous les utilitaires mentionnés ci-dessus ne créent pas exclusivement des fichiers. Mais ils effectuent l'appel système nécessaire et cela nous permet d'adapter les commandes.
Bien sûr, au niveau de la programmation ou des scripts, nous pouvons également vouloir créer un fichier, en particulier pour des raisons d'efficacité (car l'appel de commandes externes telles que touch
à partir d'un script Perl ou Python nécessitera des ressources supplémentaires).
Python one-liner:
$ python -c 'import sys,os;f=sys.argv[1];os.utime(f,None) if os.path.exists(f) else open(f,"a").close' myfile.txt
Nous pouvons le raccourcir avec ceci:
$ python -c 'import sys,os;f=sys.argv[1];'$'\n''with open(f,"a"): os.utime(f,None)' mysecondfile.txt
Et en Perl:
$ perl -e 'open(my $fh,">","/tmp/perlfile")'
1 D'autres types de fichiers tels que les liens physiques/logiciels,les périphériques spéciaux de caractères ou de blocs, les répertoires,les tuyaux nommés ou les sockets nécessitent des appels système entièrement différents.