2017-02-10 1 views
0

私はしばらくの間検索しましたが、自分で試してみましたが、これまでソートしていませんでした。マイフォルダには、タイムスタンプは、私は、各ファイルにそれぞれタイムスタンプを挿入したいbashループファイル

#!/bin/bash 
thedate= `ls | xargs stat -s | grep -o "st_mtime=[0-9]*" | sed "s/st_mtime=//g"` #get file modified time 
files= $(ls | grep -Ev '(5.txt|6.txt)$') #exclud 5 and 6 text file 

for i in $thedate; do 
    echo $i >> $files 
done 

ことで、以下の4つのファイル

1.txt, 2.txt, 3.txt, 4.txt, 5.txt, 6.txt 
私は、ファイル更新日時を印刷したい

echoに見えます。 「あいまいなリダイレクト」エラーがあります。私はそれを間違ってやっていますか?ありがとう

+0

あなたはいくつかのファイルにリダイレクトすることはできません

はあなたのようなものを必要とするいくつかのファイルを処理します。更新する各ファイルを選択するにはループが必要です。 – sorontar

+0

ありがとう! 'forEach'メソッドはありますか? – olo

+0

はい、 '$ファイル内のファイルの場合。行う ... ; done' – codeforester

答えて

1

この場合、filesはファイルの "リスト"なので、おそらく別のループを追加して1つずつ処理したいと思うでしょう。

あなたの説明はやや紛らわしいですが、あなたの目的はそのファイルに各ファイルの最終更新日時を追加する場合、あなたは次のような何かを行うことができます:私はstat -c %yを使用しました

for fspec in [1-4].txt ; do 
    stat -c %y ${fspec} >>${fspec} 
done 

注意を2017-02-09 12:21:22.848349503 +0800などの変更時間を取得してください - 私はstatのどの亜種を使用していますか、私には-sオプションがありません。あなたはまだあなたのオプションを使用することができ、あなただけの、おそらく、それはに順番に各ファイルを行うのを保証するために(上記forループ内)のようなものを持っている:

stat -s ${fspec} | grep -o "st_mtime=[0-9]*" | sed "s/st_mtime=//g" >>${fspec} 
+0

秒のオプションは '%Y'(GNU statの場合)によって与えられます。リンゴバージョンのstatは、 'strftime'フォーマットを使用する' fmt'を 'S'で持っています(私は%sをそれと使用できると仮定します)。 – sorontar

+0

Hmmm ...中国に住んでいますか?これは[+0800と一致するタイムゾーン](https://en.wikipedia.org/wiki/UTC%2B08:00)です。 – sorontar

+1

@sorontar:ボルネオ、フィリピン、ROC、西オーストラリア(私が実際に住んでいるところ)のかなりの部分と同じように。もちろん、私は中国の市民権を申請することを検討していますが、現時点で米国の幹部職を担当している狂人を悩ますだけであれば:-) – paxdiablo

1

あなたはといくつかのファイルに出力をリダイレクトすることはできません> $files。あなたは%yによって人間が読める時刻形式の変更%Yをしたい場合は

#!/bin/bash 

for f in ./[0-4].txt ; do 
    # get file modified time (in seconds) 
    thedate="$(stat --printf='%Y\n' "$f")" 
    echo "$thedate" >> "$f" 
done 

thedate="$(stat --printf='%y\n' "$f")"