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

如何用Shell单行命令删除文件列表(文件存储)中的指定文件

问题描述

我有一个存储待删除目标文件列表的文件,列表内的文件路径以换行符分隔。例如list.txt内容如下:

1/abc.txt
1/2/bcd.txt
3/efg.txt
...

请问如何编写Shell单行命令删除这些文件?我尝试执行cat list.txt|xargs -0 rm,但出现了File name too long错误。

解决方法

你之前的命令出错是因为xargs -0要求输入以空字符(\0)分隔,但你的文件里是换行符分隔,导致xargs把整个文件内容当成了一个超长文件名,所以报错。以下是几种可行的方案:

  • 基础方案(路径无空格/特殊字符):
    直接去掉-0参数,让xargs默认按换行/空格分割路径:

    cat list.txt | xargs rm
    # 或者更高效的写法(避免无用的cat进程)
    xargs rm < list.txt
    
  • 兼容含空格/特殊字符的路径(GNU xargs):
    指定换行符作为分隔符,确保每个路径被正确识别:

    xargs -d '\n' rm < list.txt
    
  • 通用兼容方案(所有Shell环境):
    使用while循环逐行读取路径,能完美处理带空格、引号、转义字符的路径:

    while IFS= read -r file; do rm -- "$file"; done < list.txt
    

    补充说明:IFS=避免路径开头/结尾的空格被截断,-r禁止反斜杠转义,--确保以-开头的路径不会被当成rm的选项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:02:34