ファイル名の文字に基づいてディレクトリ構造を作成しようとしています(ファイル名には、ファイルの書き込みが開始された日時が含まれます)。ファイル名から特定の「列」を読み取って印刷する方法を見つけました。しかし、今は整数として保存する方法がわかりません。追加するコードは次のとおりです。
#!/bin/bash
FILES=samplefilenames*
for file in ${FILES}; do
echo "${file}" | awk -F'[-_]' '{print $8}'
done
exit $ERRORS
ファイル名に「-」と「_」があるので、区切り文字があります。私が探している値を正常に印刷できるようにします。ただし、この値を変数に割り当てることはできません。これは文字通りの場合です
tempNum=echo "${file}" | awk -F'[-_]' '{print $8}'
どんな助けでも大変感謝します。
編集する:
ソースファイル名の例 - Samplefilenames_2017-10-31_12-23-13.csv(ファイル名にはすべてこの形式の日付/時刻スタンプが含まれています)配置する既存のファイルにコードを追加することです。日付別にディレクトリにまとめたいです。最初のレベルには、1月、2月、3月...(列2)のフォルダがあり、各フォルダ内にその月の各日付のサブディレクトリ(列3)があり、各フォルダにはサブディレクトリがあります。毎時間(その日の列4)また、私のファイル名は実際にはサンプルの長さよりも長いため、私のコードの列8は私のコードからのみインポートされます。これにより、値を変更する必要があることを理解しています。
ベストアンサー1
次のようにしてみてください。
#!/bin/bash
for filename in *.csv; do
dateTime=($(basename "${filename}" .csv | awk -F_ '{ print $2, $3 }'))
date="${dateTime[0]}"
time="$(echo "${dateTime[1]}" | sed -e 's/-/:/g')"
dir="$(date -d "${date} ${time}" +"%Y/%B/%d/%H")"
mkdir -p "${dir}"
mv "${filename}" "${dir}"
done
デフォルトでは、日付と時刻を解析し、コマンドを使用して
date
探しdate
ているディレクトリ構造の文字列表現を生成するために使用できるものに変換し、そのディレクトリを作成し、ファイルをそのディレクトリに移動します。
ディレクトリ形式は次のとおりです。
year/month/date/hour
年を含めない場合は、%Y/
コマンドパラメータから省略できますdate
。
私はYMMVを厳密にテストしていません。