¿Cómo puedo crear un archivo vacío desde la línea de comandos?
Utilice el touch
comando:
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.
Ejemplo:
touch newfile
> newfile
También crear un archivo vacío. Si el archivo ya existe, será truncar (vaciar). Para conservar el contenido del archivo, utilice >>
para añadir como en:
>> file
Incluso si el archivo existe, el contenido se pueden tocar.
Editar: Si no tiene ningún contenido para escribir, este es más rápido:
user@host$ :> newfileuser@host$ :>> new_or_existing_file
Nota. :
es el comando. No es parte de la solicitud.
cat /dev/null > file1.ext
la forma exacta en que también hay otra forma
echo "" > file2.ext
La diferencia es file1.ext será cero bytes y file2.ext sería un byte. Puedes verificar esto por
ls -l file*.*
Utilizar vim
editor también puede crear un archivo vacío.
vim filename
A continuación, guarde
:wq
Comando
echo -n > file
crea un archivo vacío, si su versión de echo
admite el modificador-n.
O podrías usar printf
printf '' > file
En general, la creación de cualquier1 archivo en Linux. open(2)
,openat(2)
, y creat(2)
llamadas al sistema (y específicamente con O_CREAT
bandera). Eso significa que si llama a cualquier utilidad de línea de comandos que realice estas llamadas al sistema, puede crear un nuevo archivo vacío.
Lo más común es que se cree un nuevo nombre de archivo con algo como esto:
touch /tmp/new_file
: > /tmp/new_file
true > /tmp/new_file
-
> /tmp/new_file
( solo shell bash )
toque es una utilidad independiente. Su propósito original es actualizar el tiempo de acceso y modificación de un archivo, sin embargo, si el archivo no existe, se creará. Tenga en cuenta también que un nombre de archivo -
se trata especialmente, por lo que si desea crear un archivo que se nombre literalmente -
, tendrás que encerrar eso entre comillas simples o dobles.
Por el contrario, >
es un operador de redirección de shell para flujo de salida estándar. El >
el operador llama específicamente al openat()
llamada al sistema con O_WRONLY|O_CREAT|O_TRUNC
bandera. Eso significa que, si el nombre de archivo no existe, se creará y, si lo hace , los datos se truncarán (y, por lo tanto, desaparecerán, por lo que >
debe usarse con cuidado). En la mayoría de las conchas de hoy en día true
o :
es un incorporado, por lo que hacer : > /tmp/new_file
va a ser más eficiente, aunque marginalmente en comparación con touch /tmp/new_file
.
Pero, por supuesto, no se detiene ahí. Como se mencionó, cualquier cosa que pueda realizar open()
, openat()
y, create()
las llamadas al sistema crearán un archivo. Por lo tanto, podemos hacer:
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
otempfile
( para crear archivos temporales que no necesitan existir entre reinicios !)
Por supuesto, todas las utilidades mencionadas anteriormente no crean exclusivamente archivos. Pero realizan la llamada al sistema necesaria y eso nos permite adaptar los comandos.
Por supuesto, a nivel de programación o scripting, es posible que también queramos crear un archivo, especialmente por motivos de eficiencia (porque llamar a comandos externos como touch
de un script de Perl o Python requerirá recursos adicionales).
Mono de pitón:
$ 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
Podemos hacerlo más corto con esto:
$ python -c 'import sys,os;f=sys.argv[1];'$'\n''with open(f,"a"): os.utime(f,None)' mysecondfile.txt
Y en Perl:
$ perl -e 'open(my $fh,">","/tmp/perlfile")'
1 Otros tipos de archivos, como enlaces duros/blandos, dispositivos especiales de caracteres o bloques,directorios, canalizaciones con nombre o sockets, requieren llamadas al sistema completamente diferentes.