Linux如何快速删除大量的文件
Linux如何快速删除大量的文件
在linux环境中,我们会遇到需要删除很多文件的操作,那我们该如何快速删除文件里面的内容,比如删除10W
个文件!
rm -rf *
相信很多人都会用这条命令去删除文件夹内部的文件,但是需要删除10W
个文件,会提示报错:
极其重要的警告:在你运行包含rm
命令的脚本或命令行之前,请务必再三确认你的命令是正确的。一旦执行,被删除的文件就无法恢复了。
find
有人说我们可以使用find命令将文件全部查出来去删除,这个办法可行,我们测试一下!
# 查找当前目录下面所有以 .txt 结尾的文件并使用rm删除
find . -type f -name "*.txt" -exec rm {} +
PS:
执行之后我们会发现,删除需要的时间会很久很久
,无法达到快速删除的效果!
这里是命令的详细解释:
.
表示从当前目录开始查找。-type f
表示查找的类型为文件。-name "*.txt"
定义了要查找的文件名。-exec
后面跟的是对找到的每个文件执行的命令,在这里是rm
。{}
是一个占位符,代表find
命令找到的每个文件名。+
表示将查找到的所有文件作为rm
命令的参数。
极其重要的警告:在你运行包含rm
命令的脚本或命令行之前,请务必再三确认你的命令是正确的。一旦执行,被删除的文件就无法恢复了。为了避免意外删除文件,你可以先运行find
命令而不带-exec rm {} +
部分,以查看哪些文件会被找到。确认之后再添加-exec rm {} +
来删除文件。
for 循环
我们也可以使用find命令和for循环结合将文件查出来挨个去删除,这个办法可行,我们测试一下!
# 循环查找当前目录的所有文件并逐一删除
for file in $(find . -type f -name "*.txt"); do
echo "正在删除文件: $file"
rm "$file" # 删除当前遍历到的文件
done
正在删除文件: ./1.txt
正在删除文件: ./2.txt
PS:
以上方法效率都非常低,耗费时间特别长!
rsync
原本是用来同步数据使用的命令,但我们可以把它当做一种比较快速且高效,还能保留原有文件的删除命令!
# 将我们的需要删除的文件列表导入到一个文件内,这里面存放不需要删除的文件名称
ls -l -f > /tmp/fileslist.txt
# 创建一个空目录
mkdir /tmp/aaa
# 执行同步命令
rsync -av --delete /tmp/aaa/ /root/files/ --exclude-from=/tmp/fileslist.txt
这里是命令的详细解释:
rsync
是一个强大的工具,用于在Linux/Unix系统中同步文件和目录。它可以通过网络(使用SSH或rsync守护进程)或在本地文件系统中进行同步。-av
是两个选项的组合:-a
(或--archive
)是归档模式,它保证了文件的复制是递归的,并且尽可能保持原文件的属性,如时间戳、文件权限、软硬链接等。-v
(或--verbose
)提高了命令的冗余级别,使其在执行时输出更多的信息。
--delete
选项在同步过程中删除那些存在于目的地(/root/files/
)而不在源目录(/tmp/aaa/
)中的文件。这保证了目的地目录是源目录的精确镜像。/tmp/aaa/
是源目录,rsync
将从这里复制文件。/root/files/
是目标目录,rsync
将文件同步到这里。--exclude-from=/tmp/fileslist.txt
指定一个文件,该文件内列出了在同步过程中需要排除的文件或目录模式。简而言之,/tmp/fileslist.txt
文件中列出的任何文件或目式都不会被复制到目的地目录。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 小帕鲁流浪记
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果