清晰、准确且必要的在 linux 系统中如何快速使用
ls
列出500万个文件。
当目录下有 500w 个文件, ls 命令列出所有的文件花费了 51s, 为什么会这么久呢?
默认 ls 命令会在内存中对输出的文件进行排序
那关闭排序是否可以优化?
ls 命令提供改了
-f
选项用以关闭排序功能
ls -1 -f > ~/filelist.txt
其中
-1
表示一行一个文件名-f
表示不进行排序
当目录下有 500w 个文件, 如何进行删除?
rm -rf *
-bash: /usr/bin/rm: Argument list too long
如果直接运行 rm -rf *
命令, 会得到一个参数过长的报错, 因为 rm
无法接受 500w 个参数
# 创建一个空目录
mkdir ~/empty
# 将要保留的文件名写在 retention-list.txt 中
cat > ~/retention-list.txt <<EOF
file1
file2
file3
EOF
# 删除除了 retention-list.txt 中的文件, 其中 ~/demo 为要删除文件的目标目录
rsync -av --delete ~/empty/ ~/demo/ --exclude-from=~/retention-list.txt
rsync 会将源目录 ~/empty/
同步到指定的目标目录 ~/demo/
, 此处源目录为空, 因此会期望将空目录同步到指定目录, 也就是删除目标目录中的所有文件
--delete
从目标目录中删除不在源目录的文件--exclude-from=
从文件列表中排除某些文件- 目录后要加上
/
目录符, 才表示删除目录内的文件, 如果不加, 运行该命令后不会有任何效果 --exclude-from=
的 位置很重要--exclude-from=
要写在~/demo/
之后, 才表示从~/demo
目录中排除这些文件- 如果写在
~/empty/
和~/demo/
之间, 则表示从~/empty
目录中排除文件(原本就是空目录, 等于没有排除任何文件, 运行该命令会删除目标目录下的所有文件)