我收到的文件名称采用以下格式构建
[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
部分随每个新文件而变化。
答案 0 :(得分: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"
答案 1 :(得分:1)
您可以使用通配符填写未知值
#!/bin/bash
file=/home/hlosi/AF??????`date -d "1 day ago" +"%d%m%Y"`??????.csv
echo $file
答案 2 :(得分: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
答案 3 :(得分: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中,打印字符串并从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)}'