コマンドが実行されると、ファイル名が増え、その間に一時停止します。

コマンドが実行されると、ファイル名が増え、その間に一時停止します。

私のファイル名に数字の増大サフィックスがあります。

filename01
filename02
.
.
.
filename250

次のcatコマンドを実行する前に一時停止できるコマンドを実行できるようにしたいです。

cat filename01
wait (1sec)
cat filename02
wait (1sec)
.
.
.
.
cat filename250

助けてください。私の最後のファイル名(filename250)はより高いサフィックスを持つことができます。変数設定を使用してforループを実行できるか共有する場合は、より良い提案を提供してください。ありがとうございます!

ベストアンサー1

これらのファイルを数字で並べ替えるには、代わりに使用することをおzsh勧めしますbashn数値グローバルソート グローバル予選そのような理由で。 glob拡張filename250など、これがない場合は、デフォルトのglobソート順序が語彙であるため、および間でソートされfilename*ます。filename25filename26

for file in filename<1-250>(Nn); do
  cat < $file
  sleep 1
done

N一致するファイルがない場合は、エラーを防ぐためにulllglob修飾子を使用することもできます。)

任意の数字(1つ以上のASCII 10進数シーケンス)<1-250>と一致するか、すべての項目と一致するものに置き換えます。<->*

各ファイル間で1秒待たずに毎秒1つのファイルをキャプチャします(ファイルにかかる時間もcat考慮してください)。cat

typeset -F SECONDS=0
n=0
for file in filename<1-250>(Nn); do
  cat < $file
  (( SECONDS >= ++n )) || sleep $(( n - SECONDS ))
done

(これはaがsleep浮動小数点数を取ることができると仮定します)。

bash最新のGNUシステムでも同様のことができます。

shopt -s nullglob extglob
print0() { [ "$#" -eq 0 ] || printf '%s\0' "$@"; }

readarray -td '' files <(
  print0 filename+([0123456789]) |
    LC_ALL=C sort -zV
)
for file in "${files[@]}"; do
  cat < "$file"
  sleep 1
done

私たちは、C言語環境でsortGNUバージョンソートを使用してzshのumericglobsort glob修飾子と同様のことをV行います。n

bashkshフレーバーもありますが、ksh93やzshとは異なりアンカーポイントには$SECONDSなりません)typeset F

おすすめ記事