質問: 1mを使用してhddを完全に埋めますが、..特定のまでhddを埋めるにはどうすればよいですか残りのスペースは?linuxコマンドラインとbatスクリプト(windows)の両方でこれが欲しいです。shellスクリプトとwindowsバッチスクリプトの例が最適です!ありがとう!
回答: linuxでは、次のようにして1m *だけを残すことができます。avail=$( df --output=source,avail -bm | grep sda6 | awk '{print $nf}' | sed s/m//i); size=$((avail-left) ); fallocate -l $sizem filler_file; 秘訣は、dfを解析して使用可能なスペースを取得し、fallocateを使用して必要なサイズのファイルを作成することです。ただし、@ jjlin 指摘 のように、fallocate呼び出しはすべてのファイルシステムで機能するとは限りません。上記の小さなスクリプトを関数に変換して使いやすくしたり、fallocate(をサポートしていないファイルシステム上でファイルを作成するために 代替メソッド を使用したりすることもできます。ただし、fallocateはmuch高速であり、可能な場合は優先する必要があります)。これらの行を~/.bashrc(または他のシェルと同等のもの)に追加するだけです。fill_disk(){ ## the space you want left left=$1 ## the unit you are using (units are k, m, g, t, p, e, z, y (powers of 1024) or ## kb, mb, ... (powers of 1000). unit=$2 ## the target drive disk=$3 ## the file name to create, make sure it is on the right drive. outfile=$4 ## the space currently available on the target drive avail=$(df --output=source,avail -b$unit | grep $disk | awk '{print $nf}' | sed s/$unit//i); ## the size of the file to be created size=$((avail-left)) ## skip if the available free space is already less than what requested if [ "$size" -gt 0 ]; then ## use fallocate if possible, fall back to head otherwise fallocate -l $size$unit $outfile 2>/dev/null || head -c $size$unit /dev/zero > $outfile else echo "there is already less then $left space available on $disk" fi } 次に、次のように起動できます。fill_diskdesired_free_spaceユニットtarget_diskout_fileたとえば、/foo.txt(/)で1億だけ空きを残すsda1というファイルを作成するには、次のコマンドを実行します。fill_disk 100 m sda1 /foo.txt ただターゲットファイルが埋めたいドライブ上にあることを確認してください、関数はそれをチェックしません。*小さいサイズでは確実に動作させることができませんでした。スペースが不足するか、要求した値とわずかに異なる値が表示されます。要求に応じて、これはスクリプトと同じものです。#!/bin/env/bash left=$1 unit=$2 disk=$3 outfile=$4 avail=$(df --output=source,avail -b$unit | grep $disk | awk '{print $nf}' | sed s/$unit//i); size=$((avail-left)) if [ "$size" -gt 0 ]; then fallocate -l $size$unit $outfile 2>/dev/null || head -c $size$unit /dev/zero > $outfile else echo "there is already less then $left space available on $disk" fi fill_disk.shとして保存し、次のように実行します。bash fill_disk.sh 100 m sda1 /foo.txt