如何删除文本文件中列出的文件

dak*_*aka 24 command-line files

我有一个文本文件,其中包含各种文件的路径列表。是否有我可以使用的命令来遍历每一行并删除指定路径上的文件?

Eri*_*lho 34

使用xargs

xargs rm < file  # or
xargs -a file rm
Run Code Online (Sandbox Code Playgroud)

但是如果文件名/路径包含应该转义的字符,那将不起作用。

如果您的文件名没有换行符,您可以执行以下操作:

tr '\n' '\0' < file | xargs -0 rm # or
xargs -a file -I{} rm {}
Run Code Online (Sandbox Code Playgroud)

或者,您可以创建以下脚本:

xargs rm < file  # or
xargs -a file rm
Run Code Online (Sandbox Code Playgroud)

另存为/usr/local/bin/delete-from,授予执行权限:

sudo chmod +x /usr/local/bin/delete-from
Run Code Online (Sandbox Code Playgroud)

然后运行它:

delete-from /path/to/file/with/list/of/files
Run Code Online (Sandbox Code Playgroud)

  • 非常干净的答案,但不需要`cat`,您可以使用`stdin`重定向:`&lt; file xargs rm` (2认同)

ter*_*don 21

这是一种可以处理带有空格、反斜杠和其他奇怪字符的文件名的方法:

while read -r file; do rm -- "$file"; done < list.txt
Run Code Online (Sandbox Code Playgroud)

这将读取 的每一行list.txt,将其另存为$filerm在其上运行。的-r确保反斜杠字面上读(使得\t相匹配的\t,而不是一个TAB)。将--确保它也处理文件名开头-

你也可以在 Perl 中做到这一点:

perl -lne '$k{$_}++; END{unlink for keys(%k)}' list.txt
Run Code Online (Sandbox Code Playgroud)

这会将每个文件名读%k入哈希,然后用于unlink删除每个文件名。


Avi*_*Raj 10

通过蟒蛇。

import sys
import os
fil = sys.argv[1]
with open(fil) as f:
    for line in f:
        os.remove(line.rstrip('\n'))
Run Code Online (Sandbox Code Playgroud)

将上述脚本保存在名为 like 的文件中script.py,然后通过在终端上触发以下命令来执行脚本。

python3 script.py file
Run Code Online (Sandbox Code Playgroud)

file 是一个输入文件,其中存储了您实际要删除的文件的路径。

  • 啊,至少你有勇气发布一个python答案:) (6认同)