路径问题或我的文件与bash脚本问题

时间:2014-04-03 07:58:28

标签: bash

挫折。

我昨天发布了这个问题,我最终删除了它,因为我认为晚上会给我一些喘息的机会并帮我找到答案。

今天早上我尝试了新的东西,但是不,我被卡住了。

我在/home/appseuro

上运行了以下脚本

有关信息:datenow=$(date +%Y%M%d)

for rep in $(ls -l /home/appseuro/ | grep "^d" | awk '{print $10}' | sed 's/\///g'); do
 for file in $(ls /home/appseuro/"$rep"/"$datenow"/*.tsv); 
  do /home/appseuro/trans.sh < /home/appseuro/"$rep"/"$datenow"/"$file" > /home/appseuro/"$rep"/"$datenow"/"${file%.*}v1.${file##*.}" 
  ; done ;done

此循环的目标应如下所示。对于/home/appseuro/中的每个文件夹以及这些文件夹中的每个.tsv文件以及文件夹$datenow内的每个文件夹,我正在调用我正在使用.tsv文件的脚本trans.sh输入并将它们放在不同文件的输出上。

运行后我有以下错误:

/home/appseuro/mens_actu/20140402//home/appseuro/mens_actu/20140402/ek_manu_j.csv: No such file or directory

如果我在/home/appseuro/mens_actu/20140402上运行,则下面的版本

for file in *.tsv; 
 do /home/appseuro/trans.sh < "$file" > "${file%.*}v1.${file##*.}" 
; done 

上面的这个脚本正在执行第一个脚本正在执行的操作,但没有检查文件夹,一切正常!

在处理其他问题2周后,我想在这个问题上拔出头发。

如果有人能解释原因。

对于任何不便表示抱歉

最佳。

1 个答案:

答案 0 :(得分:0)

这是你真正要做的吗?

datenow=$(date +%Y%m%d)
for file in /home/appseuro/*/"${datenow}"/*.tsv; do
    [ -e "${file}" ] || continue
    dir=${file%/*}
    filename=${file##*/}
    /home/appseuro/trans.sh < "${file}" > "${dir}/${filename%.*}v1.${filename##*.}"
done

请注意,我将date格式从%Y%M%d修改为%Y%m%d,因为它看起来像是一个错字(%M是分钟)。