【问题标题】:Shell script to find and move files and delete the affected folders用于查找和移动文件并删除受影响文件夹的 Shell 脚本
【发布时间】:2014-02-19 08:16:38
【问题描述】:

是否可以创建一个 shell 脚本,在特定类型的文件夹中及其下方查找文件,并将它们移动到另一个文件夹(这部分已经解决*)。然后删除从其中移动文件的所有文件夹?

我想应该可以将路径/文件夹名称写入数组或文件,然后从那里读取到“rm”它们。

查找文件示例:

find . \( -name "*.mpeg" – o –name "*.mkv" –o –name "*.avi" –o –name "*.mov" \) –size +536870912c –exec mv  -n –v {} /my/favorite/folder/ \;

需要删除的那些文件夹的第二部分仍然丢失。

【问题讨论】:

    标签: file shell command directory


    【解决方案1】:

    如果您不介意使用其他可执行文件,您可以这样做:

    find . \( -name "*.mpeg" – o –name "*.mkv" –o –name "*.avi" –o –name "*.mov" \) –size +536870912c | \
    gawk -F'/[^/]*$' '{print "echo mv " $0 " /WHERE/TO/MOVE" ; dirstoremove[$1]++ } 
           END       {for (d in dirstoremove) {print "echo rmdir " d } }' | \
    bash
    
    1. 首先find你的物品
    2. 然后gawk 创建可移动文件列表并将其路径存储在数组中,处理完所有文件后,为数组中的每个元素打印rmdir
    3. 并将其输出发送到执行它的bash

    注意:以上内容不会删除任何内容,只是echoes 应该做什么。如果您对结果感到满意并想要执行它,您可以删除两个“echo”或在末尾再添加一个| bash

    【讨论】:

      【解决方案2】:

      如果你喜欢单行(像我一样),你可以扩展你的命令如下:

      <your find command> -print | xargs -l dirname | sort -u | xargs rmdir
      

      -print 回显已移动文件的路径。

      xargs -l dirname 去掉文件名,生成目录名列表。

      sort -u 通过删除重复项来减少目录名称列表。

      xargs rmdir 删除目录。

      【讨论】:

        猜你喜欢
        • 2015-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-19
        • 2016-06-12
        • 1970-01-01
        相关资源
        最近更新 更多