【问题标题】:working on a file from outside the directory处理目录外的文件
【发布时间】:2014-01-24 02:37:42
【问题描述】:

我正在尝试为 eact .prt 文件创建一个 .info 文件。

但我需要从不同的目录执行 ir,并且每次都需要指向一个新目录。

到目前为止我有

#!/bin/bash
DP_DATE= cat /tmp/dp_date.txt
FOLDER= "/transfer/report_archive/preprod/$DP_DATE/"

for f in $FOLDER
do
for file in *.prt
do 
    [ -f ".info.$file" ] || wc -c < "$file" >> ".info.$file"
done
done

我不确定这是否可行!

任何帮助将不胜感激

【问题讨论】:

  • 不清楚您为什么要循环遍历$FOLDER - dp_date.txt 是否包含多个日期,或者您是否要遍历目录inside $FOLDER

标签: bash unix scripting directory


【解决方案1】:

作业中= 后面不能有空格。要分配命令的输出,您必须使用 $(...) 或反引号将其包装起来。

要处理位于另一个目录中的文件,最简单的方法是在处理之前将cd 到该目录。我在循环内的子shell中执行此操作,以便在处理下一个目录之前它将返回到原始目录。

#!/bin/bash
DP_DATE=$(cat /tmp/dp_date.txt)
FOLDER="/transfer/report_archive/preprod/$DP_DATE/"

for f in $FOLDER
do ( # Subshell so cd is temporary
    cd "$f"
    for file in *.prt
    do 
        [ -f ".info.$file" ] || wc -c < "$file" >> ".info.$file"
    done
   )
done

【讨论】:

  • bamar 这太不可思议了,非常感谢,是的。 dp_date 是一个临时文件,每天都会更新,这些报告会在每个日期进入一个新文件夹。
【解决方案2】:

您必须在$() 中包装命令替换:

DP_DATE=$(cat /tmp/dp_date.txt)

等号后的空格将导致一个空变量并尝试执行第二个参数:

FOLDER="/transfer/report_archive/preprod/$DP_DATE/"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多