我在同一级别有两个目录,我可以这样做:
rm -rf dir1/; rm -rf dir2/
但它们将按顺序运行,我怎么能并行删除它们?是否有一个通用的解决方案,允许我扩展到许多文件夹?
更新
目录可能深层嵌套,包含其他目录等等。
答案 0 :(得分:9)
在后台运行命令
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 {} \;
OR
find yourpath/folder2 -mtime +5 |xargs rm
find foldername -exec rm -rf {} \; &
答案 1 :(得分:5)
如果你想要做的不仅仅是并行删除目录,你可以用GNU parallel做很多平行的花哨的东西。由于它通常不是发行版中的基本实用程序,您可能需要使用您喜欢的包管理器安装它,例如apt-get install parallel
。
但是,你可以做这样很酷的事情,比如你运行4个并行进程,想要显示进度,没有唠叨通知,并且让并行运行睡眠命令,每个等待5s,10s,15s,20s。
$ 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
欢迎咨询fine tutorial。
答案 2 :(得分:1)
我必须尽快清理/ 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
答案 3 :(得分:0)
如果有人在这里返回相同的解决方案。我想这样做容易得多:
进入您有其他子文件夹的文件夹或要批量删除的文件。让我们称之为target_folder
所以
cd target_folder
输入ls -la
并输入
[home@target_folder]$ ls -la
它将列出所有子文件夹和文件。现在最后一步。类型:
[home@target_folder]$ rm -rf {folder1,folder2,folder3,so on...}
只需双击文件名,然后右键单击即可粘贴,以及关于它的信息。完成后列出所有文件名..按Enter和wolla ..all文件夹或文件将被删除。
答案 4 :(得分:0)
简单的解决方案: 转到目标文件夹并执行rm -r'一些正则表达式' ,与正则表达式匹配的文件夹名称将被删除。
答案 5 :(得分:0)
在平面文本文件中创建文件夹列表(即list_delfolders)。然后在for循环或while循环中运行。 $ cat list_delfolders |同时读取ID做rm -rf“ $ ids”;完成