有些文件有“.”以它们的名字命名,如何使用 .txt 文件作为 rm 命令的输入来删除它们

有些文件有“.”以它们的名字命名,如何使用 .txt 文件作为 rm 命令的输入来删除它们

我的文本文件列出了我的 Linux 系统上的许多文件,这些文件已被识别为需要删除。其中一些文件是在 Windows 上创建的并包含“1. '或'2。 ' (即句点后有文字空间)等等。

rm如果我输入rm -f带引号的文件名命令,该命令将删除它们。但是输入这个命令 700,000 次就不会发生这种情况。我尝试将“列表”文件输入到命令中,但它会跳过名称不规则的文件。

无论如何,是否可以将删除命令放入脚本中以自动方式执行?

答案1

我想你刚刚遇到了通常会告诉你的原因之一不解析输出ls

也就是说,如果您list.txt包含要删除的文件名(每行一个),并且使用 Linux 风格的行尾,则以下方法也应该有效:

while IFS= read filename
do
  rm "$filename"
done < list.txt

尽管建议您首先测试这一点(例如,通过使用创建虚拟文件touch "1. this is a first test.txt"touch "2. my second_file.bla"然后创建list.txt包含这些文件名的虚拟文件)。

您可以将上述代码包含在bash脚本中,也可以直接在命令行中键入,这必须看起来行

user@host$ while IFS= read filename; do rm "$filename"; done < list.txt

答案2

可以使用?(问号)作为通配符来完成交互式删除。例如

rm 1.?

将删除1.

缺点是它也会删除任何1.a文件。

如果您的文件列表是 list.txt,每行一个文件,您可以使用

awk '{printf "rm \"%s\"\n",$0}' file.txt 

生成命令

在哪里

  • $0是整行(包括任何尾随或前导空格)

如果没问题,那么使用

awk '{printf "rm \"%s\"\n",$0}' file.txt |bash

相关内容