Bash 基于当前日期和文件名模式识别文件的脚本
有10个文件位于不同的目录中,其中包含日期模式。我需要一个接一个地选择这些文件并发送到远程站点,我还想列出文件命名模式、配置文件中的位置,并从配置文件中逐个选择脚本,但没有任何运气 示例文件名模式和位置Bash 基于当前日期和文件名模式识别文件的脚本,bash,shell,date,csv,curl,Bash,Shell,Date,Csv,Curl,有10个文件位于不同的目录中,其中包含日期模式。我需要一个接一个地选择这些文件并发送到远程站点,我还想列出文件命名模式、配置文件中的位置,并从配置文件中逐个选择脚本,但没有任何运气 示例文件名模式和位置 /documents/accounts/transfer/done/abc_yyyy-mm-dd_hh-mm-ss-[0-9]{6}.csv /documents/namelist/transfer/done/def_yyyy-mm-dd_hh-mm-ss-[0-9]{6}.csv /docum
/documents/accounts/transfer/done/abc_yyyy-mm-dd_hh-mm-ss-[0-9]{6}.csv
/documents/namelist/transfer/done/def_yyyy-mm-dd_hh-mm-ss-[0-9]{6}.csv
/documents/newcustomer/transfer/done/ghijkl_yyyy-mm-dd_hh-mm-ss-[0-9]{6}.csv
我试过:
#!/bin/bash
date=`date +%Y-%m-%d`;
config_file="/scripts/config/abc.cfg";
echo $config_file;
URL="http://localhost:9200/document-$date";
find /documents -type f -name "*_'${date}'*.csv" | while read filename
do
echo "filename : ${filename}"
var=$(base64 $filename| perl -pe 's/\n//g');
var1= curl -XPUT 'http://localhost:9200/documents-'$date'/document/?pipeline=attachment&pretty' -d' { "data" : "'$var'" }')
done;
有人可以建议如何最好地执行此操作吗?在
find
命令中,您可以将日期
变量周围的单引号删除为
find -type f -name "*_${date}*.csv"
由于双引号“
本身扩展了bash
中变量的值,因此您不必再次使用单引号
演示:-
touch abc_2016-12-28-3523424-acsfsc.csv
touch abc_2016-12-29-3523424-acsfsc.csv
在不使用-name
过滤器的情况下确认是否存在文件
find . -maxdepth 1 -type f -print
./abc_2016-12-28-3523424-acsfsc.csv
./abc_2016-12-29-3523424-acsfsc.csv
现在将变量date
设置为今天的日期,如下所示:
date=$(date +%Y-%m-%d)
find -type f -name "*_${date}*.csv"
./abc_2016-12-28-3523424-acsfsc.csv
也不要在bash
中使用管道来设置变量,使用和使用-print0
可以更有效地处理文件名中带有特殊字符的文件
while IFS='' read -r -d '' filename
do
echo "filename : ${filename}"
var=$(base64 "$filename"| perl -pe 's/\n//g');
var1=$(curl -XPUT "http://localhost:9200/documents-$date/document/?pipeline=attachment&pretty" -d '{ "data" : "'"$var"'" }')
done < <(find -type f -name "*_${date}*.csv" -print0)
而IFS=''read-r-d''文件名
做
回显“文件名:${filename}”
var=$(base64“$filename”| perl-pe's/\n//g');
var1=$(curl-XPUT)http://localhost:9200/documents-$date/document/?pipeline=附件和附件“-d'{“数据”:““$var”“}”)
done<什么不起作用?如果使用上面的命令,find命令不会拾取任何文件。但是当我使用*.csv时,它会拾取目录中我不需要的所有文件,并且只拾取特定日期的文件。你能提供一个实际的示例文件名并在其中包含正确的日期值吗?你的脚本无法工作,因为它正在查找带有curr的文件ent timestamp,您需要在find中使用正则表达式,然后才能使用我的解决方案解决问题?您可以使用我最后一次回答中的脚本示例