You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

tar压缩脚本执行后生成同名文件的原因及解决方法

问题原因
  • 脚本里的find | xargs mv命令末尾加了&,让文件移动操作后台异步执行,后续的tar、rm命令会立刻运行,不会等后台的移动任务完成。
  • 当rm -rf compressdir执行完毕后,后台的移动进程可能还在运行,此时compressdir目录已经被删除,mv命令发现目标目录不存在,就会把待移动的文件直接重命名为compressdir(也就是你看到的同名文件)。如果有多个文件在后台等待移动,最后完成移动的文件会覆盖之前的,最终留下一个名为compressdir的文件。
解决方法
  1. 去掉后台执行符号&,让文件移动操作在前台完成后,再执行后续的压缩、删除步骤:
    修改后的脚本片段:

    sudo find . -type f -name "*.txt" -print | xargs -I {} mv {} compressdir > /dev/null 2>&1
    
  2. 更可靠的写法:用find -exec替代xargs,避免文件名含特殊字符(如空格)导致的问题,同时无需依赖xargs:

    sudo find . -type f -name "*.txt" -exec mv {} compressdir \; > /dev/null 2>&1
    
  3. 可选:增加目录有效性检查,进一步避免意外:
    在移动文件后添加判断,确保目录存在且有内容再执行压缩:

    if [ -d "compressdir" ] && [ "$(ls -A compressdir)" ]; then
        tar -cvzf compresslog.tar.gz --remove-files compressdir
        mv compresslog.tar.gz compresslog-`date +"%d%m%Y"`.tar.gz
    fi
    rm -rf compressdir
    

内容的提问来源于stack exchange,提问作者tuanle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 05:31:10