
スペースで区切られたファイルのリストがあり、touch
このコマンドを使用してそのタイムスタンプを順次更新したいと思います。ただし、ファイル名をパラメータとして指定すると、タイムスタンプは異なる順序で更新されます。
touch 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt 10.txt 11.txt 12.txt
上記のコマンドを実行して実行した後ls -t
(修正時間でソート)、次のようになります。
1.txt 10.txt 11.txt 12.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt
コマンドに引数を指定すると、実行順序は保証されませんか?そうでない場合、これらのファイルのタイムスタンプを特定の順序でどのように更新できますか?
答え1
時間を指定しないと、touch
各ファイルをタッチするとすべてのパラメータのタイムスタンプが現在の時刻に変わります。これにより、ファイルごとに異なるタイムスタンプが生成されますが、ほとんどの場合、これはすべてのパラメータに適用されます。同じタイムスタンプを使用できます。stat
連絡されたすべてのファイルを実行して確認します。コマンドラインで指定された順序で処理されます。
必要な結果を得るには、touch
少し遅れて各ファイルを個別に繰り返す必要があります。
for file in {1..12}.txt; do touch $file; sleep 0.1; done
(待機時間は、基本ファイルシステムのタイムスタンプ確認に依存します。)
リストされたファイルはls -t
タイムスタンプに基づいて降順にソートされているため、確認する回数が増えますls -rt
。
答え2
少し面倒かもしれませんが、スクリプトにあった場合はforループを使用したでしょう。
前任者:
for x in 1.txt 2.txt 3.txt 4.txt [as many as you want here]; do touch $x; done
これは常に与えられた順序で生成されます。もちろん、どんなパターンにも従わずに名前を何でも変更できます。たとえば、同じ名前または番号パターンを持つファイルを作成する場合は、次のようにします。
for x in $(seq 1 10); do touch $x.txt; done