400'den fazla GiB veri içeren bir dizine sahibim. Ben düşündüm basit bir yolu oldu bu yüzden tüm dosyalar, hatasız okunabilir kontrol etmek istedik tar
içine o /dev/null
. Ancak bunun yerine aşağıdaki davranışı görüyorum:
$ time tar cf /dev/null .
real 0m4.387s
user 0m3.462s
sys 0m0.185s
$ time tar cf - . > /dev/null
real 0m3.130s
user 0m3.091s
sys 0m0.035s
$ time tar cf - . | cat > /dev/null
^C
real 10m32.985s
user 0m1.942s
sys 0m33.764s
Yukarıdaki üçüncü komut zaten çok uzun süre çalıştıktan sonra Ctrl+ tarafından zorla durduruldu C. Ayrıca, ilk iki komut çalışırken, içeren depolama cihazının etkinlik göstergesi .
neredeyse her zaman boştaydı. Üçüncü komutla gösterge sürekli yanar, bu da aşırı meşgul olma anlamına gelir.
Böylece tar
, çıktı dosyasının ne zaman olduğunu bulabiliyor /dev/null
, yani /dev/null
doğrudan dosyaya yazılan tanıtıcıya açıldığında tar
, dosya gövdesi atlanmış gibi görünüyor. ( Dizin içindeki tüm dosyaları 'kırmızı olanı basmak v
için seçenek ekleme ).'tar
tar
Öyleyse merak ediyorum, bu neden böyle? Bir çeşit optimizasyon mu? Eğer öyleyse, neden tar
böyle özel bir durum için bu kadar şüpheli bir optimizasyon yapmak istesin ki ?
Linux 4.14.105’de amd64’de GNU tar 1.26 kullanıyorum.
pv
: tar -cf - | pv >/dev/null
. Bu, sorunu pv
gtar -cf /dev/zero ...
etmek için kullan .
find . -type f -exec shasum -a256 -b '{}' +
. O kalmıyor aslında okumak ve tüm verileri sağlama toplamı, ancak çıkış saklamak varsa, dosyaların içeriği değişmediğini kontrol etmek daha sonra yeniden çalıştırabilirsiniz.