Bash %%参数扩展无法统计文件

时间:2014-10-29 03:43:10

标签: bash

我首先编写了脚本 - 从foofile文件中取出一行。然后添加一个日期 tron _ * .csv文件,然后gzip文件,然后scp该文件。

为了让我将日期添加到文件中,我从文件中剪切后缀 - 我切断了 从文件名中输入csv,然后将日期附加到新文件名,然后重新附加 " dot csv"到文件名,然后我将$ i文件转换为新名称然后gzip和 scp文件。

#!/bin/bash
set -x
sed -i '/D,642,0642,ZIPPY,FOO,,M,,S,S,FARFEGNUGEN,213,213,/d' ./tron_foot.csv
today=$(/bin/date +%Y%m%d)
#today=20141024
echo $today
for i in tron_foott.csv  tron_stk.csv
do
  cut_suffix=$(printf ${i%%.*})
  cp -p $i $cut_suffix.$today.csv
  gzip -f $cut_suffix.$today.csv
  sleep 2
  scp -r -p $cut_suffix.$today.csv.gz casper_bank@casper.bank.com:/data/DROPBOX/
  sleep 2
done

问题是在我切断后缀后脚本不再看到文件。

我认为它不会那样工作--cp语句看不到原来的名字 的文件。我认为切断文件的后缀只是装饰性的。我没有 认为它改变了$ i的价值 - 我认为这只是改变了名称,而不是内容 该文件。

caper_user@casper_server:~$ /data/gprocess_cboe_tron_files
+ sed -i /D,642,0642,BEAR,TWIT,,M,,S,S,FARFEGNUGEN,213,213,/d /data/gtron_mmstk.csv
++ /bin/date +%Y%m%d
+ today=20141028
+ echo 20141028
20141028
+ for i in tron_mmet.csv tron_mmstk.csv
++ printf tron_mmet
+ cut_suffix=tron_mmet
+ cp -p tron_mmet.csv tron_mmet.20141028.csv
cp: cannot stat `tron_mmet.csv': No such file or directory
+ gzip -f tron_mmet.20141028.csv
gzip: tron_mmet.20141028.csv: No such file or directory
+ sleep 2
+ scp -r -p tron_mmet.20141028.csv.gz casper_bank@casper.bank.com:/data/DROPBOX/
tron_mmet.20141028.csv.gz: No such file or directory
+ sleep 2
+ for i in tron_mmet.csv tron_mmstk.csv
++ printf tron_mmstk
+ cut_suffix=tron_mmstk
+ cp -p tron_mmstk.csv tron_mmstk.20141028.csv
cp: cannot stat `tron_mmstk.csv': No such file or directory
+ gzip -f tron_mmstk.20141028.csv
gzip: tron_mmstk.20141028.csv: No such file or directory
+ sleep 2
+ scp -r -p tron_mmstk.20141028.csv.gz casper_bank@casper.bank.com:/data/DROPBOX/
tron_mmstk.20141028.csv.gz: No such file or directory
+ sleep 2
caper_user@casper_server:~$ cd /data/g

3 个答案:

答案 0 :(得分:2)

简单的解释是文件首先不存在。

我注意到您的代码显示./,但您的成绩单显示/data/g表示已成功完成的一项操作。

也许你需要意识到相对路径是从调用脚本的进程的当前工作目录中解析出来的。换句话说,如果您在/tmp并且运行/home/you/script,则脚本中的文件名./tron_mmstk.csv将解析为/tmp/tron_mmstk.csv,而不是/home/you/tron_mmstk.csv

顺便说一下,你应该正确地双引所有包含文件名的变量,但这似乎不是问题所在。

此外,printf是多余的。

cut_suffix=${i%.csv}

最后,sleep似乎没有任何用处。

答案 1 :(得分:2)

你的路径已关闭。您在某些地方使用完整路径,但在其他地方使用(隐式)相对路径。

tron_mmet.csv ~caper_user中不存在</data,但~caper_user中存在{{1}},但脚本正在从{{1}}运行并使用裸文件名。

答案 2 :(得分:1)

cp: cannot stat `tron_mmet.csv': No such file or directory

$i的值未发生变化。工作目录中根本没有名为tron_mmet.csv的文件。脚本是否在正确的目录中执行?