Komut satırından boş bir dosya nasıl oluşturulur

Komut satırından nasıl boş bir dosya oluşturabilirim?

Kullan... touch komut:

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.

Örnek:

touch newfile
> newfile

Ayrıca olacak yaratmak boş bir dosya. Dosya zaten mevcutsa, şu şekilde olacaktır: buduyordu (boşaltıyordu). Dosya içeriğini saklamak için >> içinde olduğu gibi eklemek için:

>> file

Dosya mevcut olsa bile, içeriğe dokunulmaz.

Düzenlemek: Yazacak herhangi bir içeriğiniz yoksa, bu daha hızlıdır:

user@host$ :> newfileuser@host$ :>> new_or_existing_file

Not. : komut burada. İstemin bir parçası değil.

cat /dev/null > file1.ext 

kesin yol başka bir yol da var

echo "" > file2.ext 

Fark dosya1'dir.ext sıfır bayt ve dosya2 olacaktır.ext bir bayt olurdu. Bunu şu adresten kontrol edebilirsiniz

ls -l file*.*

Kullanım vim editör ayrıca boş bir dosya oluşturabilirsiniz.

vim filename

Sonra kaydet

:wq

Komut

echo -n > file

sürümünüz boş bir dosya oluşturuyorsa echo -n anahtarını destekler.

Ya da kullanabilirsin. printf

printf '' > file

Genel olarak, herhangi bir düzenli oluşturma1 linux'ta dosya şunları içerir open(2) ,openat(2), ve creat(2) sistem çağrıları (ve özellikle O_CREAT bayraklar). Bu, bu sistem çağrılarını yapan herhangi bir komut satırı yardımcı programını çağırırsanız, yeni bir boş dosya oluşturabileceğiniz anlamına gelir.

Çoğu zaman yeni dosya adı böyle bir şeyle oluşturulur:

  • touch /tmp/new_file
  • : > /tmp/new_file
  • true > /tmp/new_file
  • > /tmp/new_file (sadece bash kabuğu)

dokunma bağımsız bir yardımcı programdır. Asıl amacı, bir dosyanın erişim ve değiştirme süresini güncellemektir, ancak dosya mevcut değilse - oluşturulacaktır. Ayrıca bir dosya adı olduğunu unutmayın - özel olarak ele alınır, bu nedenle tam anlamıyla adlandırılmış bir dosya oluşturmak istiyorsanız - bunu tek veya çift tırnak içine almanız gerekecek.

Aksine, > bir kabuk yeniden yönlendirme işleci için mi stdout akışı. Bu > operatör özellikle openat() sistem çağrısı ile O_WRONLY|O_CREAT|O_TRUNC bayraklar. Bu, dosya adı yoksa - oluşturulacağı ve eğer varsa - verilerin kesileceği (ve dolayısıyla kaybolacağı) anlamına gelir > dikkatli kullanılmalıdır). Günümüzde çoğu kabukta true veya : yerleşik, öyle yapıyor : > /tmp/new_file marjinal olarak karşılaştırıldığında daha verimli olacak touch /tmp/new_file.

Ama elbette orada bitmiyor. Belirtildiği gibi, gerçekleştirebilecek her şey open(), openat() ve, create() syscalls bir dosya oluşturur. Bu nedenle, yapabiliriz:

  • 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 veya tempfile (yeniden başlatmalar arasında bulunması gerekmeyen geçici dosyalar oluşturmak için!)

Tabii ki, yukarıda belirtilen tüm yardımcı programlar yalnızca dosya oluşturmaz. Ancak gerekli sistem çağrısını yapıyorlar ve bu da komutları uyarlamamıza izin veriyor.


Tabii ki, programlama veya komut dosyası düzeyinde, özellikle verimlilik amacıyla da bir dosya oluşturmak isteyebiliriz (çünkü aşağıdaki gibi harici komutları çağırmak touch bir Perl betiğinden veya Python'dan ek kaynaklar gerekir).

Python tek astar:

$ 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

Bununla daha kısa yapabiliriz.:

$ python -c 'import sys,os;f=sys.argv[1];'$'\n''with open(f,"a"): os.utime(f,None)' mysecondfile.txt 

Ve Perl'de:

$ perl -e 'open(my $fh,">","/tmp/perlfile")'

1 Sabit / yumuşak bağlantılar, karakter veya blok özel aygıtlar, dizin, adlandırılmış yöneltmeler veya soketler gibi diğer dosya türleri tamamen farklı sistem çağrıları gerektirir.