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

时间:2016-03-03 12:21:15

标签: bash concatenation xargs

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

文件串联工作,生成的$ 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

1 个答案:

答案 0 :(得分:-1)

问题来自concat_file位于working_dir内的事实; find concat_filexargsconcat_filefind $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 。例如,试试这个:

public function updateEs($data)
    {
        $params = array();
        $params['index'] = \App::environment();
        $params['type'] = $data['context'];
        $model = new \Modules\Catalog\Repositories\ProductRepo;

        $form = $model->loadProduct($data['id']);// whole data come from database 
        $data=(object)$form; //array to object

            $data['body'] = $data;
            $data['index'] = 'my_index';
            $data['type'] = 'product';
            $data['id' ]= $data['id'];

        $response = \Es::update($data);
    }

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

IF EXISTS (SELECT TOP 1 1 FROM TBL_STAGING)
BEGIN
  BEGIN TRANSACTION NT_ALL_DOMAIN 
  INSERT INTO  TBL_DOMAIN
      (DOMAIN_NAME,
      DISTINGUISHED_NAME,
      EMAIL_ADDR_I)
  SELECT  DOMAIN_NAME,  
      DISTINGUISHED_NAME,
      EMAIL_ADDR_I
  FROM TBL_STAGING
  COMMIT
END
ELSE
BEGIN
 RETURN 'no data on table'
END