0

我是 Unix 的新手,我有一个包含文件名列表的文件。我正在尝试复制同一目录中的每个文件,但扩展名不同。它不工作。谁能告诉我为什么我的代码在下面 csl_nl.sts 是具有其他文件名的文件?

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

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

end
exit 0
4

5 回答 5

2

这对我有用

#!/bin/csh

foreach file (`cat csl_nl.sts`)
    set a=`echo $file | awk -F"." '{print $1}'`
    echo "$a"
end
于 2012-07-03T10:19:31.133 回答
2
  1. 获取用于编写脚本的Real Shell 。
  2. 阅读有关阅读行和文件操作 圣经。

一个例子

#!/bin/sh
while IFS= read -r file; do
    printf 'Moving %s to %s\n' "$file" "${file}.cdc"
    ${file:+'false'} || cp -- "$file" "${file}.cdc"
done
于 2012-07-03T07:55:03.700 回答
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
于 2012-07-03T08:06:59.733 回答
-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
于 2012-07-03T09:17:19.470 回答
-1

不能说我熟悉 (t)csh,但是,这是强制性的 bash 示例:

#!/bin/bash

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

取决于输入文件的格式,但如果它们由空格或行分隔,那应该可以工作。

于 2012-07-03T07:41:16.597 回答