我有两个在同一级别的目录,我可以这样做:
rm -rf dir1/; rm -rf dir2/
但它们将按顺序运行,我该如何并行删除它们?是否有通用解决方案可以扩展到许多文件夹?
更新
目录可能会包含其他目录,以此类推,这些目录可能会嵌套得很深。
我有两个在同一级别的目录,我可以这样做:
rm -rf dir1/; rm -rf dir2/
但它们将按顺序运行,我该如何并行删除它们?是否有通用解决方案可以扩展到许多文件夹?
更新
目录可能会包含其他目录,以此类推,这些目录可能会嵌套得很深。
在后台运行命令
rm -rf dir &; rm -rf dir2 &;
语法long_command with arguments > redirection &
通过将命令输出重定向到文件,您可以捕获任何消息。
这些链接将有所帮助 ==> http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
问题标题和示例给人的印象是问题很小。但是添加赏金表明了问题的严重性。
如果您指定文件类型,效果会更好。不过,我提供一些基于分割的删除选项,可以并行执行。根据您的需求,您可以尝试以下选项:
find /yourpath/folder1 -size +1048576 -exec rm -f {} \; &
find /yourpath/folder2 -size +1048576 -exec rm -f {} \; &
ls -l /yourpath/folder1 | awk '{print $9}' | awk -F. '{print $(NF)}' |sort |uniq
你可能会得到类似的结果
.txt
.log
.tmp
.zip
现在,根据文件扩展名删除文件。
find yourpath/folder1 -name '*.txt' -exec rm {} \; &
find yourpath/folder1 -name '*.tmp' -exec rm {} \; &
find yourpath/folder1 -name '*.log' -exec rm {} \; &
find yourpath/folder2 -name '*.txt' -exec rm {} \; &
find yourpath/folder2 -name '*.tmp' -exec rm {} \; &
find yourpath/folder2 -name '*.log' -exec rm {} \; &
find yourpath/folder1 -mtime +5 -exec rm {} \;
find yourpath/folder2 -mtime +5 |xargs rm
删除文件夹及其子文件夹以及其中的文件。find foldername -exec rm -rf {} \; &
for d in dir*; do rm $d& done
。 - Colin Pitrat如果你想做更多的并行操作而不仅仅是删除目录,你可以使用GNU parallel来进行许多并行操作。由于它通常不是发行版中的基本工具,因此您可能需要使用您喜欢的软件包管理器(例如apt-get install parallel
)进行安装。
然后,您可以像这样做一些很酷的事情,比如运行4个并行进程,显示进度,没有烦人的提示,并让并行运行一个等待5秒、10秒、15秒和20秒的休眠命令。
$ parallel -j 4 --progress --no-notice sleep ::: 5 10 15 20
Computers / CPU cores / Max jobs to run
1:local / 4 / 4
Computer:jobs running/jobs completed/%of started jobs/Average seconds to complete
local:0/4/100%/5.0s
你的例子将会像这样运行:
$ parallel --no-notice rm -rf ::: dir1 dir2 dir3
请随意查阅优秀的教程。
find dir1 dir2 dir3 -type f | parallel --jobs 0 -a - rm {}; find dir1 dir2 dir3 | parallel --jobs 0 -a - rm -rf {}
。该命令用于查找目录dir1、dir2、dir3中的文件,并删除它们。第一部分(find dir1 dir2 dir3 -type f | parallel --jobs 0 -a - rm {}
)会查找目录中的所有文件,然后使用并行处理工具parallel
和rm
命令删除这些文件。第二部分(find dir1 dir2 dir3 | parallel --jobs 0 -a - rm -rf {}
)则会递归地查找目录中的所有子目录,并删除它们及其内容。 - smac89我需要尽快清理/media文件夹中的一些文件夹。
以下命令可以在大约5分钟内删除80个磁盘上每个磁盘的9T数据。
$ sudo find /media -maxdepth 2 -name "data-8" -type d | while read folder; do eval "sudo rm -rf ${folder} &"; done
这个命令在后台启动了80个并发的rm -rf
sudo
时,记得特别小心地使用 rm -rf
。 - astorga创建一个纯文本文件夹列表(即list_delfolders),然后在for循环或while循环中运行。 $ cat list_delfolders | while read ids; do rm -rf“$ids”;done
如果有人因同样的问题再次访问此页面,我认为以下方法会更加容易:
进入包含其他子文件夹或要批量删除的文件的文件夹。我们称之为目标文件夹
,因此执行以下命令:
cd 目标文件夹
输入ls -la
并按回车键。
[home@target_folder]$ ls -la
它将列出所有子文件夹和文件。现在是最后一步。输入:
[home@target_folder]$ rm -rf {folder1,folder2,folder3,so on...}
只需双击文件名,右键粘贴即可完成操作。当您列出所有文件名后,按Enter键,所有文件夹或文件都将被删除。
&
?rm -rf dir1/& rm -rf dir2/
。这样,Bash 就不会等待第一个命令(删除 dir1)开始执行第二个命令。 - Auzias