复制bash中文本文件中的文件名列表

时间:2014-03-27 09:48:31

标签: bash

我需要在文本文件中复制文件名列表。试着这样:

#!/bin/sh

mjdstart=55133
mjdend=56674
datadir=/nfs/m/ir1/ssc/evt
hz="h"

for mjd in $(seq $mjdstart $mjdend); do
    find $datadir/ssc"${hz}"_allcl_mjd"${mjd}".evt -maxdepth 1 -type f -printf $datadir'/%f\n' > ssc"${hz}".list
done

我也试过了:

find $datadir/ssc"${hz}"_allcl_mjd"${mjd}".evt -maxdepth 1 -type f -printf $datadir'/%f\n' | split -l999 -d - ssc"${hz}".list

或其他组合,但显然我遗漏了一些东西:文本文件是空的。我的错误在哪里?

3 个答案:

答案 0 :(得分:1)

使用>>(追加)代替>(覆盖),否则您将只输出最后一个命令:

> ssc"${hz}".list
for mjd in $(seq $mjdstart $mjdend); do
    find $datadir/ssc"${hz}"_allcl_mjd"${mjd}".evt -maxdepth 1 -type f -printf $datadir'/%f\n' >> ssc"${hz}".list
done

答案 1 :(得分:1)

您不需要在此处使用find,因为您只需要检查其存在的一系列特定文件名:

#!/bin/sh

mjdstart=55133
mjdend=56674
datadir=/nfs/m/ir1/ssc/evt
hz="h"

for mjd in $(seq $mjdstart $mjdend); do
    fnname="$datadir/ssc${hz}_allcl_mjd${mjd}.evt"
    [[ -f $fname ]] && printf "$fname\n"
done > "ssc$hz.list"

答案 2 :(得分:0)

您使用find错误。第一个参数是应该搜索的目录。此外,使用>会在每个回合中覆盖您的列表文件。使用>>连接:

find $datadir -maxdepth 1 -type f -name "src${hz}_allcl_mjd${mjd}.evt" >> ssc"${hz}".list