GNU/Linux >> Belajar Linux >  >> Linux

Apakah mv dengan wildcard masih atomik

Solusi 1:

Mari kita mulai dengan pernyataan bahwa mv tidak selalu atomik.

Mari kita identifikasi juga bahwa atomisitas mengacu pada konten file, bukan nama file.

Untuk setiap file, pemindahan atau penggantian nama dilakukan oleh mv bersifat atomik asalkan file tersebut dipindahkan dalam sistem file yang sama. Atomisitas tidak menjamin bahwa file tersebut hanya ada di satu tempat atau lainnya; sangat mungkin file tersebut dapat hadir di sistem file di kedua tempat secara bersamaan untuk "waktu yang singkat". Apa yang dijamin atomisitas, ketika ditawarkan, adalah bahwa konten file tersedia secara instan sepenuhnya dan bukan sebagian. Bisa dibayangkan mv itu dalam situasi seperti itu dapat diimplementasikan dengan ln diikuti oleh rm .

mv pasti bukan atom ketika perpindahan yang dilakukannya adalah dari satu sistem file ke yang lain, atau ketika sistem file jarak jauh tidak dapat mengimplementasikan mv operasi secara lokal. Dalam hal ini mv bisa dikatakan diimplementasikan dengan setara dengan cp diikuti oleh rm .

Sekarang, beralih ke pertanyaan tentang atomisitas di banyak file. mv paling baik hanya atom per file, jadi jika Anda memiliki sejumlah file untuk dipindahkan bersama, implementasinya sedemikian rupa sehingga file tersebut akan dipindahkan satu per satu. Jika Anda suka, mv file1 dir; mv file2 dir; mv file3 dir .

Jika Anda benar-benar membutuhkan sekelompok file untuk muncul di suatu tujuan secara bersamaan, pertimbangkan untuk meletakkannya di direktori dan pindahkan direktori itu. Objek tunggal ini (direktori) dapat dipindahkan secara atomik.

Solusi 2:

Nomor mv dir1/* sama dengan mv dir1/file1 && mv dir1/file2 && mv dir1/fileN . Setiap gerakan individu bersifat atomik, tetapi bukan set lengkap.


Linux
  1. Dd Vs Cat — Apakah Dd Masih Relevan Saat Ini?

  2. Apakah Mv Atomic Di Fs?

  3. Ganti Baris Baru Dengan Nul?

  1. Izin File di Linux dengan Contoh

  2. Peringatan dengan nftw

  3. Mempertahankan izin file dengan Git

  1. tar -C dengan pola file wildcard

  2. Bagaimana cara mengisi file dengan FF menggunakan dd?

  3. Perilaku rsync dengan file yang masih ditulis?