如何在知道部分文件名的情况下删除文件夹中的一堆文件?

如何在知道部分文件名的情况下删除文件夹中的一堆文件?

我有一个 Markdown 文件夹。这些文件使用以下文件名约定:[Time-based ID] [Title]。按照此约定,文件名为202204101548 Banana bread202204101549 Banana cake

问题是,我想删除一堆这样的文件。

逐个删除它们太耗时了,所以这是不可能的。这就是我能想到的全部。我对 Linux 的了解不够,无法自己想出解决方案。而且尝试获取必要的知识现在有点超出我的能力范围。所以,我请求你的帮助。

我知道我的请求可能听起来有些懒惰,但我认为至少你们中的一些人会有一个值得思考的好问题。

文件的基于时间的 ID:

202106130712
202106200737
202106200757
202106200743
202106200845
202106130905
202106200728
202106200732
202106200752
202106200813
202106130847
202106200804
202106200815
202106200808
202106191046
202106191110
202106201003
202106191117
202106200724
202106090937
202106090918
202106101133
202106101134
202106110731
202106101135
202106110708
202106110713
202106110718
202106110751
202106110732
202106110756
202106110714
202106130714
202106201030
202106201032
202106130948
202106120959
202106101026
202106141032
202106130942
202106121006
202106121027
202106130914
202106130936
202106130940
202106130841
202106190907
202106101028
202106120908
202106130943
202106130839
202106101027
202106101024
202106190911
202106140742
202106140802
202106140735
202106101132
202106190947
202106190958
202106121022
202106130832

提前感谢您提供的任何帮助。我会提供信息或根据要求采取行动。

答案1

由于所有文件名都以 开头2021,请尝试进行试运行(在包含文件的目录中):

find -type f -name "2021*"

如果对输出满意,则(从包含文件的目录中)删除:

find -type f -name "2021*" -delete

要使用文件中的“基于时间的 ID”列表精确删除,请尝试以下操作(更改file为包含 ID 列表的文件的名称,每个 ID 都在新行上,与问题中的示例完全相同)

while IFS= read l; do
   find -type f -name "$l*"
done < file

如果对输出满意,则删除:

while IFS= read l; do
   find -type f -name "$l*" -delete
done < file

答案2

使用通配符。

mv *[0-9]*

删除带有数字的文件。

mv *[12]*

将删除所有带有 1 或 2 的文件。

mv 2021[01][3-6]*

将删除 202103* 至 202106* 以及 202113* 至 202116*

如果您想进行试运行,可以用“ls”替换“rm”,它将在屏幕上显示要删除的内容。所以...

ls *[1-3][a-c]*

将列出包含组合 1a、1b、1c、2a、2b、2c、3a、3b、3c 的所有文件。

答案3

您始终可以使用 rm 命令。假设我有 20 个文件,分别名为 text01.txt、text02.txt、text03.txt 等。我可以使用:

rm -f text*

-f 选项表示强制(不询问您是否要删除文件),并且所有上述文件都将被删除。对于你的情况,请尝试

rm -f *banana...(w/e)

相关内容