Test1YYYYMMDDHHMM1.txt
、、、、 ... Test1YYYYMMDDHHMM2.txt
、Test1YYYYMMDDHHMM3.txt
形式で100個のファイルを生成する方法はTest1YYYYMMDDHHMM100.txt
?ファイルはシェルスクリプトの変数ディレクトリに書き込まれます。
答え1
YYYYMMDDHHMM
現在の年、月、日、時、分でなければならないと仮定し、必要なファイルを移植可能に生成するには、シェルでループを使用できます。
#!/bin/sh
destdir=${1:-.}
cd "$destdir" || exit 1
now=$( date +%Y%m%d%H%M )
i=0
while [ "$i" -lt 100 ]; do
i=$(( i + 1 ))
touch "Test1$now$i.txt"
done
cd "$destdir" || exit 1
現在のディレクトリをディレクトリパス$destdir
で参照されているディレクトリに変更するか、それが可能でない場合はスクリプトを終了します。このdestdir
変数は、スクリプトコマンドラインの最初の引数または引数が指定されていない場合、.
現在のディレクトリから値を取得します。その中にファイルを作成するには、~/somedir
このスクリプトを./script ~/somedir
。
now
必要なタイムスタンプの文字列表現で値を設定することから始めます。その後、100回繰り返し、touch
タイムスタンプとカウンタ変数と一緒にコマンドを使用してファイルを生成しますi
。
シェルでは、bash
上記のループを中括弧拡張で置き換えることができます。これは、生成されたコマンドラインの全長が長すぎない限り可能です。長すぎると(100ファイルではない)、「パラメータリストが多すぎます」というエラーが発生し、上記のループと同様の方法を使用する必要があります。
%(...)T
ユーティリティを呼び出す代わりに、組み込みユーティリティと一緒に特殊な書式文字列を使用することもできます。これにはバージョン4.2以降が必要です。printf
bash
date
bash
#!/bin/bash
destdir=${1:-.}
cd "$destdir" || exit 1
printf -v now '%(%Y%m%d%H%M)T' -1
touch "Test1$now"{1..100}.txt
作成する必要がある場合数千ファイルにある場合、上記のコードではこれを行うことはできません。本当に気に入らないループ(または読み取り不可能でメンテナンスできないコードを書くのと同じ)の場合は、このxargs
コマンドが役に立ちます。
#!/bin/bash
destdir=${1:-.}
cd "$destdir" || exit 1
printf -v now '%(%Y%m%d%H%M)T' -1
printf 'Test1%s.txt\n' "$now"{1..100} | xargs touch
これにより、パラメータを読み取り(一度にすべてではなく)管理可能なバッチでファイルを生成するユーティリティがtouch
呼び出されます。組み込みユーティリティなので、すべてのファイル名でユーティリティを呼び出すのに問題はありません。xargs
printf
printf
printf
シェルでzsh
変わりたい場合は、次のことを実行できます。
#!/bin/zsh
destdir=${1:-.}
cd $destdir || exit 1
zmodload zsh/datetime
strftime -s now %Y%m%d%H%M
i=0
repeat 100 touch Test1$now$((++i)).txt
明らかに一般的な中括弧拡張を使用することもできますが、zsh
上記はzsh
sループを使用する方法repeat
の単純化されたバリエーションを示しています。
答え2
mkdir Test1$(date +%Y%m%d%H%M){1..100}
touch Test1$(date +%Y%m%d%H%M){1..100}.txt
これにより、100のディレクトリが作成され、マンページで日付を確認し、bashで中括弧の拡張を確認します。これがあなたがここで働くものです。
このtouch
コマンドは同じことを行いますが、ファイルを生成します。
これらのアイデアはbashのさまざまなコマンドに使用でき、さまざまな方法で作業できるため、実際に学び理解するのに時間を費やす必要があります。