Bunu yapmanın muhtemelen basit bir hilesi var, ama man sayfasından anlayamıyorum.
Örneğin kullanarak son 1 MB'yi belirsiz boyuttaki dosyadan nasıl kesebilirim dd
?
Bunu yapmanın muhtemelen basit bir hilesi var, ama man sayfasından anlayamıyorum.
Örneğin kullanarak son 1 MB'yi belirsiz boyuttaki dosyadan nasıl kesebilirim dd
?
Yanıtlar:
Eh, sahip olduğunuzu varsayarak stat
ve bash
dosya boyutunu şu şekilde alabilirsiniz:
stat -c %s your_file
Bu $amount
dosyanın son baytını ile ayıklamak istiyorsanız dd
, şunları yapabilirsiniz:
dd if=your_file of=extracted_part \
bs=1 count=$amount \
skip=$(( $(stat -c %s your_file) - $amount ))
Ancak akılcı yaklaşım tail
şunları kullanmak olacaktır :
tail -c $(( 1024*1024 )) your_file > target_file
-c
seçenek yok head
mu?
dd --help Kullanım: dd [OPERAND] ... veya: gg SEÇENEK İşlenenlere göre dönüştürerek ve biçimlendirerek bir dosyayı kopyalayın. bs = BYTES bir seferde BYTES bayt okuma ve yazma (ayrıca bkz. ibs =, obs =) cbs = BYTES bir seferde BYTES bayt dönüştürür conv = CONVS, virgülle ayrılmış simge listesine göre dosyayı dönüştürür count = BLOCKS yalnızca BLOCKS giriş bloklarını kopyala ibs = BYTES bir seferde BYTES bayt okuyor (varsayılan: 512) if = DOSYA stdin yerine FILE dosyasından okundu iflag = Virgülle ayrılmış sembol listesine göre okunan FLAGS obs = BYTES bir seferde BYTES bayt yazar (varsayılan: 512) of = FILE stdout yerine FILE yaz oflag = Virgülle ayrılmış sembol listesine göre FLAGS yazma seek = BLOCKS çıktı başlangıcındaki BLOCKS engel boyutundaki blokları atla skip = BLOCKS giriş başlangıcında BLOCKS ibs boyutlu blokları atla status = noxfer baskı transfer istatistikleri BLOKLARI ve BYTES'i aşağıdaki çarpım ekleri izleyebilir: c = 1, w = 2, b = 512, kB = 1000, K = 1024, MB = 1000 * 1000, M = 1024 * 1024, xM = M GB = 1000 * 1000 * 1000, G = 1024 * 1024 * 1024 vb. T, P, E, Z, Y için.
Dosya boyutu tam olarak 10MB ise, 1024 * 10 10240K Bu son 1024K'dan ayrılacaktır. İbs ve obs seçeneklerini kullanarak üzerinde çalıştığınız blok boyutunu belirtmelisiniz.
1M = 1024K
1024*9 = 9216
dd if=/10/MB/file of=/9/MB/file count=9216K ibs=1K obs=1K
dd if=/10/MB/file of=/9/MB/file count=9M ibs=1M obs=1M
Ayrıca, dosyanın ilk 1 MB'sini atlayarak dosyanın sonuna kadar okumak için atla seçeneğini kullanarak dosyanın ilk 1 MB'sini atlayabilirsiniz.
dd if=/10/MB/file of=/9/MB/file skip=1M ibs=1M obs=1M
Arama seçeneğini kullanarak çıktı dosyanızdaki belirli bir yere a yazabilirsiniz. İlk 1MB'yi korumak ve son 8MB'yi yazmak istediğinizi varsayalım.
dd if=/10/MB/file of=/9/MB/file skip=1M seek=1M count=8M ibs=1M obs=1M
Doğru miktarda veri girip çıkardığınızdan emin olmak için büyük olasılıkla dosya boyutunuz hakkında bazı ayrıntılar almanız gerekir.
ls -s --block-size 1K ./my/10MB/file
adam ls --block boyutlu = BOYUT SIZE baytlık bloklar kullanır. Aşağıdaki SIZE biçimine bakın -s, --size her bir dosyanın ayrılan boyutunu bloklar halinde yazdır SIZE fol‐dan biri olabilir (veya isteğe bağlı olarak bunu izleyen bir tam sayı olabilir) indirme: KB 1000, K 1024, MB 1000 * 1000, M 1024 * 1024, vb. G, T, P, E, Z, Y.