2012-07-03 71 views
0

我是Unix中的新手我有一个包含文件名列表的文件。我试图复制同一个目录中的每个文件,但使用不同的扩展名。它不工作。任何人都可以告诉我为什么我的代码是咆哮csl_nl.sts是其他文件的名称的文件?从unix中的一个文件中逐行读取

#!/bin/csh 
set files = ("csl_nl.sts") 
foreach file ('cat files') 

    echo "Copying" $file "to" $file.cdc 
    cp $file $file.cdc 

end 
exit 0 
+0

我不明白你的问题。你的预期和实际产出是多少? –

+0

它不工作我没有得到任何出我的预期输出是在列表中创建它们在同一目录中的文件的副本 –

回答

-1

不能说我很熟悉(T)CSH,但是,这里的强制性bash的例子:

#!/bin/bash 

for file in `cat csl_ns.tst`; do 
echo $file " -> " $file.cdc 
cp $file $file.cdc 
done 

取决于输入文件的格式,但应该工作,如果他们被空白或线条分开。

+1

[不读取行的](http://mywiki.wooledge.org/ DontReadLinesWithFor) – ormaaj

+0

在这种情况下,由于我不知道这个文件的格式,我想要的行为是跳过空白行并拆分间隔行。话虽如此,我并不知道其他的陷阱,这证明是一些非常有趣的信息。 – Trickfire

2
  1. Get a Real​​用于编写脚本。
  2. 阅读TheBible关于读取行和文件操作。

一个例子

#!/bin/sh 
while IFS= read -r file; do 
    printf 'Moving %s to %s\n' "$file" "${file}.cdc" 
    ${file:+'false'} || cp -- "$file" "${file}.cdc" 
done 
0
#!/bin/ksh 

OLD_EXTN=old 
NEW_EXTN=new 

cat csl_nl.sts | while read line; 
do 
    if [ ! -f $line]; 
    then 
    echo $line does not exist ; 
    else 
    newfn=$(dirname $line)/$(basename $line .$OLD_EXTN).$NEW_EXTN 
    echo Copy from $line to $newfn 
    cp $line $newfn; 
    fi 
done 
+0

@AyaAbdelsalam“没有这样的文件或目录”。列表中的一个文件不存在或名称中包含空格。 –

-1

看看这有助于:

#!/bin/csh 
    set files = ("abc") 
    foreach file (`cat $files`) 
    set ext = ("cdc") 
    set file2 = "$file.$ext" 
    echo "Copying" $file "to" $file2; 
    cp $file $file2; 

    end 
exit 0 
+0

如果那个低估了这个答案的人也给出了理由,我将不胜感激。 –

1

这个工作对我来说

#!/bin/csh 

foreach file (`cat csl_nl.sts`) 
    set a=`echo $file | awk -F"." '{print $1}'` 
    echo "$a" 
end