0

次の形式で作成された名前のファイルを受け取ります

[2letters e.g.AF][6-digit-number sequence][Date in ccyymmdd][Time in hhmmss]

例えば:

AF00010720120917144500.csv

ファイルの日付部分を使用して、そのようなファイルをデータベースに自動的にロードしたいと考えています。

次のように始まる何か:

#!/bin/bash
filename_datepart=$(echo `date -d "1 day ago" +"%d%m%Y"`)
filename="/home/hlosi/AF000107"$filename_datepart".csv"

ただし、パーツ000107は新しいファイルごとに変更されることに注意してください。

4

4 に答える 4

1

これがBASHソリューションです:

#!/bin/bash

#The full name
fullname="/home/hlosi/AF00010720120917144500.csv"

#Rip off the directory
file=$(basename "$fullname")

#Now pull out just the characters that we want
extract=$(echo "$file" | cut -c3-8)
echo "You want: $extract"
于 2012-09-17T13:01:53.737 に答える
1

ワイルドカードを使用して不明な値を入力できます

#!/bin/bash
file=/home/hlosi/AF??????`date -d "1 day ago" +"%d%m%Y"`??????.csv
echo $file
于 2012-09-17T13:09:03.590 に答える
0

私の無知を許してください -atime -ctime -mtime 私は -ctime だと思います

find  -ctime 1  -name \*.csv -print

-mtime csv の末尾に一致し、正確に 1 日経過しています。これの問題は、24 時間以内に機能するため、24 時間未満のファイルでも昨日は表示されないことです。

これは物事を行うためのより簡単な方法であり、将来の校正のためにファイル名のフォーマットの変更を気にしません.

cd pathtcsv;
d=`date -d "1 day ago" +"%d"`
d=$d find . -type f -name \*.csv -ctime 1 -exec ls -l {} \;|awk '$7 ~ d'|awk '{print $NF}'|  awk '{ print substr( $0, length($0) - 1, length($0) ) }'

# D = $d は昨日の日付として設定され、csv で終わるファイルを yseterday から見つけて ls を実行し、awk にパイプして昨日の日付に対して値 7 をチェックアウトします。$7 は ls -l の日付値です。 、最終的に最後のフィールドを出力し、最後の awk にパイプして、文字列を出力し、char 位置から char 位置に分割します。ここで必要な文字を把握する必要があります。これは、上記の 0 ~ 10 の文字位置の別の例です。

 d=$d find . -type f  -ctime 1 -name \*.csv -exec ls -l {} \;|awk '$7 ~ d'|awk '{print $NF}'|  awk '{ print substr( $0, 0, 10)}'
于 2012-09-17T17:54:07.233 に答える
0

あなたはこれが欲しいと思います。複数のファイルを処理する必要がある場合。

#!/bin/bash
fpath=/home/hlosi/
filename_datepart=$(echo `date -d "1 day ago" +"%d%m%Y"`)
files=$(find $fpath -iname "*$filename_datepart.csv")
for file in $files
do
    echo "found file: " $file
done
于 2012-09-17T13:11:29.957 に答える