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

时间:2016-02-20 14:47:14

标签: linux ubuntu concurrency

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

rm -rf dir1/; rm -rf dir2/

但它们将按顺序运行,我怎么能并行删除它们?是否有一个通用的解决方案,允许我扩展到许多文件夹?

更新

目录可能深层嵌套,包含其他目录等等。

6 个答案:

答案 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 {} \; &
    

  • 按修改时间删除文件
  • 以下命令尝试删除超过5天的文件。

    find yourpath/folder1 -mtime +5 -exec rm {} \;
    

    OR

    find yourpath/folder2 -mtime +5 |xargs rm 
    

  • 删除文件夹&它的子文件夹包括它的文件
  • find foldername -exec rm -rf {} \; &
    

    example folder & sub folder structure

    答案 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)

    如果有人在这里返回相同的解决方案。我想这样做容易得多:

    1. 进入您有其他子文件夹的文件夹或要批量删除的文件。让我们称之为target_folder所以

      cd target_folder
      
    2. 输入ls -la并输入

      [home@target_folder]$ ls -la
      
    3. 它将列出所有子文件夹和文件。现在最后一步。类型:

      [home@target_folder]$ rm -rf {folder1,folder2,folder3,so on...}
      
    4. 只需双击文件名,然后右键单击即可粘贴,以及关于它的信息。完成后列出所有文件名..按Enter和wolla ..all文件夹或文件将被删除。

    答案 4 :(得分:0)

    简单的解决方案: 转到目标文件夹并执行rm -r'一些正则表达式' ,与正则表达式匹配的文件夹名称将被删除。

    答案 5 :(得分:0)

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