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

您可以使用通配符来填写未知值

#!/bin/bash
file=/home/hlosi/AF??????`date -d "1 day ago" +"%d%m%Y"`??????.csv
echo $file
于 2012-09-17T13:09:03.590 回答
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 回答
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 设置为昨天的日期,它从 yseterday 中查找以 csv 结尾的文件,然后执行 ls,通过管道进入 awk 并根据昨天的日期检查值 7,其中 $7 是 ls -l 上的日期值,它最终将最后一个字段和管道打印到最终的 awk 中,该 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 回答