删除具有特定文件类型的多个子目录

删除具有特定文件类型的多个子目录

我有一个包含 100 个子目录的父文件夹,其中 50 个有.dlg文件,50 个没有.dlg文件

现在我想将那些包含.dlg文件的子文件夹作为一个整体移动到另一个文件夹中,并处理那些没有.dlg文件的子文件夹。

答案1

find . -type d -exec sh -c '
    for dir; do
        ls -- "$dir/"*.dlg >/dev/null 2>&1 && \
        echo mv -v -- "$dir" /move/to/tmp/;
    done
' sh {} + 

删除echo用于mv干运行移动目录的命令。

答案2

find命令非常适合此类任务。

让我首先设置一些文件以进行测试:

$ mkdir -p tmp/testing/{1..100}
$ find tmp/testing -mindepth 1 | shuf | head -50 | while read d; do touch "$d"/foo.dlg; done

这创建了一百个目录,其中随机 50 个包含一些名为foo.dlg.现在我们想将它们移动到某个地方:

$ mkdir tmp/testing2/
$ find tmp/testing -type f -regex ".*\.dlg" -exec dirname {} + | while read d; do mv "$d" tmp/testing2/; done

find命令查找所有带有 .dlg 扩展名的文件并对其tmp/testing执行。dirnamedirname命令很乐意获取一长串文件或目录,并返回与参数对应的目录列表。

因此,在获取所有这些目录名后,我们将其传递到执行移动的循环中。当然,mv -v如果您想要有关所发生事件的更详细反馈,您可以使用。

相关内容