Cómo crear un archivo vacío desde la línea de comandos

¿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 o tempfile ( 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.