サブディレクトリのファイルを読み取り、タイムスタンプのある単一の場所に移動

サブディレクトリのファイルを読み取り、タイムスタンプのある単一の場所に移動

複数のサブディレクトリ内のすべてのファイルを1つのディレクトリに移動し、そのファイルにタイムスタンプを追加する必要があります。

次のディレクトリ構造があります。

Interface/Temp/GoodsRecipt/GR123/abc.csv, cad.csv    
Interface/Temp/GoodsRecipt/GR456/abc.csv, cad.csv

任意のディレクトリから単一のディレクトリにCSVファイルを移動し、ファイルにタイムスタンプを追加したいと思います。結果は次のとおりです。

Interface/Temp/GoodsRecipt/GRout/abc05082014.csv,  cad05082014.csv, abc06032014.csv, cad06032014.csv

これを行うには、シェルスクリプトを作成してスタンドアロンで実行する必要があります。シェルスクリプトの作成にご協力いただきありがとうございます。

ベストアンサー1

INDIR='./Interface/Temp/GoodsRecipt'
OUTDIR='./Interface/Temp/GoodsRecipt/GRout'

mkdir -p "$OUTDIR"

find "$INDIR"/GR*/ -type f -name '*.csv' | while IFS= read f ; do
  fd=$(date +'%Y%m%d' -d @$(stat -c %Y "$f"))
  bn=$(basename "$f" .csv)
  mv "$f" "$OUTDIR/$bn$fd.csv"
done

注:ここではDDMMYYYYの代わりにYYYYMMDDを使用しました。日付形式が優れている理由はいくつかありますが、最も重要なことの1つは、正しく並べ替えられる唯一の形式です。

もう一つの重要な理由は、誰もYYYYDDMMを使用しないので明示的であるということです。ただし、05082014は「2014年5月8日」(アメリカ人の場合)を意味することも、「2014年8月5日」(世界中のほぼすべての場所)を意味する場合もあります。意図された意味が何であるかを知る方法がないため、この形式を使用するのは安全ではありません。

DDMMYYYYを引き続き使用するには、日付コマンドを次のように変更してくださいdate +'%d%m%Y'

  fd=$(date +'%d%m%Y' -d @$(stat -c %Y "$f"))

おすすめ記事