2016-03-03 63 views
1

此代码块将复制我的问题。当我连接文件列表时,出现“输入文件是输出文件”错误。输入文件是输出文件压缩错误或替代方法

文件连接的工作原理和得到的$ 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 

回答

-1

的问题来自于以下事实:concat_file位于内working_dir;此刻find将给concat_filexargs,这反过来将尝试自己俘获该文件。

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

'-print0'意味着线不符合一个文件名中的输出'find'。 'grep -v'会过滤错误的文本。 – chepner

+0

感谢Edouard的回应。我现在明白它包含目标文件,并可以在另一个目录中创建它。 – todwith1d