【问题标题】:input file is output file suppress error or alternate method输入文件是输出文件抑制错误或替代方法
【发布时间】:2016-03-03 20:50:18
【问题描述】:

此代码块将复制我的问题。连接文件列表时出现“输入文件是输出文件”错误。

文件连接有效,生成的 $concat_file 正是我想要的。我不知道如何抑制错误,并且由于作业频繁运行,它正在填满我的邮箱。其他帖子建议添加“|| true”,但这不起作用。

任何关于错误抑制或替代方法的帮助都会很棒。谢谢

working_dir=~/files_for_concat
dt=$(date +%Y_%m_%d_%H_%M_%S)
concat_file=$working_dir/$dt

mkdir $working_dir
cd $working_dir
echo "one" > one
echo "two" > two

find $working_dir -maxdepth 1 -type f -print0 |
  sort -z |
  xargs -0 cat -- >> $concat_file

cat $concat_file

【问题讨论】:

    标签: bash concatenation xargs


    【解决方案1】:

    问题在于concat_file位于working_dir内部;一会儿find 会将concat_file 提供给xargs,而xargs 又会尝试将文件放入自己的目录中。

    解决方案是从搜索中排除concat_file。例如试试这个:

    find $working_dir -maxdepth 1 -type f -print0 |
      grep -v "$concat_file" |                       # This excludes the file
      sort -z |
      xargs -0 cat -- >> $concat_file
    

    您也可以通过这种方式改进脚本的开头:

    test -d "$working_dir" || mkdir "$working_dir"
    cd "$working_dir" || exit 1
    

    【讨论】:

    • -print0 表示在find 的输出中,一行不对应单个文件名。 grep -v 将过滤错误的文本。
    • 感谢爱德华的回复。我现在明白它包含目标文件,可以在另一个目录中创建它。
    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多