Answers:
如果您无法删除目录,则可以始终使用find。
find . -maxdepth 1 -type f -exec rm -f {} \;
这将删除当前目录中的所有文件,并且仅删除当前目录(而不是子目录)。
find dir/to/delete -delete
不为rm
每个文件生成要删除的进程)。
find dir/to/delete -type f -delete
找 。-maxdepth 1 -type f -exec rm -f {} \;
它只是花费太长时间(每个文件一个rm可执行文件)。
这一效率更高:
找 。-maxdepth 1 -type f -print0 | xargs -r0 rm -f
因为它会尽可能多地使用rm参数的文件名,然后在下一次加载文件名时运行rm ...可能会发生rm仅被调用2到3次的情况。
ionice
在之前添加rm
是个好主意。
这些都将解决问题。有在每个技术的各自表现的分析在这里。
find . -name WHATEVER -exec rm -rf {} \;
要么
ls WHATEVER | xargs rm -rf
问题源于bash用目录中的每个项目扩展“ *”。这两种解决方案都依次处理每个文件。
find . -print0 | xargs -0 rm
)时才有效。
ls *
”,“ *
”将扩展到您的shell抱怨过长的参数列表。ls .
改为使用“ ”(或向上一级目录执行“ ls [dirname]
”)。
所有这些查找调用都非常好,但是我很少记得我急忙时需要的术语:相反,我使用ls。就像有人提到的那样,ls。可以工作,但是我更喜欢ls -1:
ls -1 | xargs -n 100 rm -rf
-n xxx数字非常安全,因为超过最大值将被自动更正(如果超过了size-max;请参见-s),或者如果超过了应用程序的args-max,通常会明显。
应该注意的是,当您只想删除大目录中的文件子集,并且出于某种原因而不想使用find时,grep可以方便地插入到此链的中间。
该答案假设您正在为ls,xargs等使用Gnu核心实用程序。
这是用于在系统需要保持响应速度时删除大量文件的版本。
它的工作方式是分批分发工作(默认情况下为100个文件),然后等待其他工作完成。
出色地工作,从ext3的单个目录中删除了超过一百万个文件。它打印完成百分比作为一点奖金
noOfFiles=`ls -U | wc -l`
n=0
while (ls -U | tail -n 100 | xargs rm -f); do
n=$((n+100));
sync;
echo -en "$((n*100/noOfFiles))%, ($n of $noOfFiles)\r";
sleep 5;
done
解决“参数过长”或“无法分配内存”错误
这对会话文件夹中的220,000+个文件起到了作用。
优点:立即开始删除文件
cd路径/到/文件夹
ls -f | xargs rm -f -v
单击以查看要删除的文件的屏幕截图 - (在15分钟内删除了所有文件)
-f (ls之后)不进行预排序
-v (在rm之后)将每个文件显示为已删除
-f (在rm之后)强制进行写保护的文件而没有提示
提示:首先,将文件夹重命名(例如,将会话重命名为session_old),以防止在尝试删除文件时添加其他自动生成的文件。您可以手动重新制作原始目录(如果不是我这种情况)