2014-01-06 23 views
0

我有一个名为/ folder/files/$ SET_DATE /的文件夹中有三个文件,但根据日期可能有更多。Bash脚本。如果file.prt存在,则创建.info.file.prt。

Ben.prt 
.info.Ben.prt 
Jim.prt 
John.prt 

我想创建一个.INFO。*文件夹中的每个文件.PRT PRT文件,但如果已经存在,我不想创建两个。

一个懒惰会给我留下以下内容。

服务器奔10:30 <〜> LL-LART

.info.Ben.prt 
.info.Jim.prt 
.info.John.prt 
Ben.prt 
Jim.prt 
John.prt 

在.INFO的值。* foles将在.PRT文件字符的个数。

所以我有以下几点。

SET_DATE= cat /tmp/date.txt 

FILES="/folder/folder/folder/$DP_DATE/.info.*" 
FILESF="/folder/folder/folder/$DP_DATE/" 
FILESP="*.prt" 

if [ ! -e $FILESF".info."$FILESP ]; then 
echo 0 >> $FILESF.info.$FILESP 
fi 

虽然现在很难找到我的头。

任何向正确的方向发展都将是非常明智的。

回答

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

对于每个.prt文件名不与.点开始,如果相应.info文件不存在,在文件中找到的字符数创建它。

+0

实际上,这不会从外部目录工作,你知道我怎么能从一个不同的文件夹运行此文件夹中的文件运行? –

+0

最简单的方法是将想要操作的目录名称作为参数传递,并让脚本将目录更改为该位置。第一行,就在'for'循环之上,可以是'cd $ {1: - “。”} ||退出1',意思是改变到由第一个参数指定的目录或当前目录。这避免了必须将文件名与路径名分开。另一种选择是将文件的名称作为命令行参数进行检查。这样做虽然需要将名称拆分为目录(路径)和文件名。可以,但是提琴。 –