ubuntu 如何并行删除多个文件夹?

2ledvvac  于 2023-05-06  发布在  其他
关注(0)|答案(7)|浏览(191)

我有两个目录在同一级别,我可以做:

rm -rf dir1/; rm -rf dir2/

但它们将按顺序运行,我如何并行删除它们?有没有一个通用的解决方案,让我可以扩展到许多文件夹?

更新

这些目录可以被深度嵌套,包含其他目录等等。

q7solyqu

q7solyqu1#

在后台运行命令

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 {} \; &
  • 删除文件的修改时间下面的命令尝试删除文件超过5天。
find yourpath/folder1 -mtime +5 -exec rm {} \;

find yourpath/folder2 -mtime +5 |xargs rm
  • 删除文件夹&它的子文件夹包括它的文件
find foldername -exec rm -rf {} \; &

t5fffqht

t5fffqht2#

如果您不想并行删除目录,可以使用GNU parallel执行许多并行操作。由于它通常不是发行版中的基本实用程序,因此您可能需要使用您最喜欢的包管理器安装它,例如。apt-get install parallel .
但是,你可以做这样很酷的事情,比如你运行4个并行进程,想要显示进度,没有nag通知,让并行运行一个sleep命令,每个等待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

8oomwypt

8oomwypt3#

我必须尽快清理/media中的一些文件夹。
以下命令能够在大约5分钟内删除80个磁盘中每个磁盘上的9 T数据

$ sudo find /media -maxdepth 2 -name "data-8" -type d | while read folder; do eval "sudo rm -rf ${folder} &"; done

这在后台踢了80个平行rm -rf

chy5wohz

chy5wohz4#

2020更新

如果有人回来找同样的解决方案。我想这样做要容易得多:
1.进入你有其他子文件夹或文件要批量删除的文件夹。我们称之为target_folder

cd target_folder

1.键入ls -la并输入

[home@target_folder]$ ls -la

1.它将列出所有子文件夹和文件。最后一步。型号:

[home@target_folder]$ rm -rf {folder1,folder2,folder3,so on...}

只需双击文件名,然后右键单击粘贴,就可以了。一旦你完成了列出所有文件名。按回车键,瞧。所有文件夹或文件将被删除。

vwkv1x7d

vwkv1x7d5#

很简单!!!
rm -r文件夹1文件夹2文件夹3

sqougxex

sqougxex6#

在平面文本文件中创建文件夹列表(即list_delfolders)。然后在for循环或while循环中运行。$ cat list_delfolders|while读取id;do rm -rf“$ids”;完成

nhn9ugyo

nhn9ugyo7#

简单的解决方案:转到目标文件夹并执行rm -r 'some regex',与regex匹配的文件夹名称将被删除。

相关问题