如何删除Linux中除特定文件外的所有文件

发布时间:2023-05-19

一、选定需要保留的文件名列表

在删除Linux中除特定文件外的所有文件之前,我们需要先明确哪些文件不能被删除。在这个过程中,我们需要创建一个文本文件,包含需要保留的文件名列表,这将是我们将要使用的参数。

touch to_keep.txt
vi to_keep.txt
# 将需要保留的文件名逐行输入并保存

二、使用find命令

find命令可以在指定路径下查找符合条件的文件,并且可以根据文件名、类型、大小、时间等多个参数进行精确搜索。

1. 仅显示要删除的文件

首先我们可以先使用find命令查找需要删除的文件,确保我们要删除的文件都存在于列表中。这个步骤主要是为了避免误删了需要保留的文件。

find /path/to/search -type f ! -name "$(xargs <to_keep.txt | sed 's/ /\\|/g')"

"!"代表排除,xargs会去除空格并用"|"连接每个文件名,sed则是将空格替换成"|"。这个命令将会列出需要删除的文件。

2. 删除查找到的文件

一旦您已经确定您要删除的文件名列表,您可以使用删除命令删除上一步列出的文件:

find /path/to/search -type f ! -name "$(xargs <to_keep.txt | sed 's/ /\\|/g')" -delete

这个命令会删除上一步列出的所有文件。

三、使用rsync命令

rsync命令通常用于文件同步和备份,不过在这种情况下,我们也可以使用它来将需要保留的文件复制到一个新的目录,然后将原始目录删除,并重新命名复制的目录。以下是几个步骤:

1. 复制需要保留的文件

rsync -av --progress --exclude-from=to_keep.txt /path/to/search /path/to/new_directory

这个命令会复制目标文件夹中不在保留列表之内的所有文件到一个名为new_directory的新目录,--exclude-from选项会排除所有保留文件。

2. 删除原始目录

rm -r /path/to/search

请谨慎执行此命令,以确保您已经在步骤一中成功地复制了所有需要保留的文件。

3. 重命名新目录

mv /path/to/new_directory /path/to/search

这个命令将新目录由new_directory改为原始目录的名称。