如何控制在Unix中基于另一个文件复制文件?

如何控制在Unix中基于另一个文件复制文件?,unix,Unix,我有一个脚本,如下所示,它根据文件的存在和文件编号将文件从源目录复制到目标目录 但是,在使用上述脚本执行上述文件复制时,我不想复制文件编号显示在以下文件中的文件。 CSI_CONFIRMIT_RESPONSE_SWITCHOFF.cfg 11369 11370 11372 请帮帮我。谢谢最简单的方法是使用grep检查文件中是否存在文件编号,并且仅在文件编号不存在时执行复制: for FILE_NUM in 11259 11318 11366 11367 11368 11369 113

我有一个脚本,如下所示,它根据文件的存在和文件编号将文件从源目录复制到目标目录



但是,在使用上述脚本执行上述文件复制时,我不想复制文件编号显示在以下文件中的文件。

CSI_CONFIRMIT_RESPONSE_SWITCHOFF.cfg

11369

11370

11372

请帮帮我。谢谢

最简单的方法是使用
grep
检查文件中是否存在文件编号,并且仅在文件编号不存在时执行复制:

for FILE_NUM in 11259 11318 11366 11367 11368 11369 11370 11372 11373 11374 11385 11386 11387 11388 11389 11390 11398; do
    if ! grep -qFxw "$FILE_NUM" CSI_CONFIRMIT_RESPONSE_SWITCHOFF.cfg
    then
        # copy code here
    fi
done
但是,这并不高效,因为您正在为每个号码运行
grep

一种更有效的方法是使用
comm
一次,将数字列表与文件进行比较,以确定文件中不存在哪些数字。如下所示:

file_nums=(11259 11318 11366 11367 11368 11369 11370 11372 11373 11374 11385 11386 11387 11388 11389 11390 11398)
comm -23 <(printf -- '%s\n' "${file_nums[@]}" | sort) <(sort CSI_CONFIRMIT_RESPONSE_SWITCHOFF.cfg) | while IFS= read -r FILE_NUM
do
    # copy code here
done
file_nums=(11259 11318 11366 11367 11368 11369 11370 11372 11373 11374 11385 11386 11387 11388 11389 11390 11398)

comm-23您在回答之前的问题时使用了一个片段。如果这个代码片段值得使用,为什么不把答案投上一票或者把它标记为接受呢?朋友..我没听懂你们的意思…我的意思是我接受你们所有人的答案,否则我怎么能把我的问题贴在这里呢。对不起,我误导了你。如果你有能力,请回答这个最新的问题。谢谢
file_nums=(11259 11318 11366 11367 11368 11369 11370 11372 11373 11374 11385 11386 11387 11388 11389 11390 11398)
comm -23 <(printf -- '%s\n' "${file_nums[@]}" | sort) <(sort CSI_CONFIRMIT_RESPONSE_SWITCHOFF.cfg) | while IFS= read -r FILE_NUM
do
    # copy code here
done