输入文件是输出文件抑制错误或替代方法



此代码块将复制我的问题。 当我连接文件列表时,我收到"输入文件是输出文件"错误。

文件串联有效,生成的 $concat_file 正是我想要的。 我不知道如何抑制错误,随着作业频繁运行,它填满了我的邮箱。 其他帖子建议添加"||真的",但这行不通。

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

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

问题来自这样一个事实,即concat_file位于working_dir内部;此刻find会给xargs concat_file,而又会试图将文件放在自己身上。

解决方案是从搜索中排除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

最新更新