我有一个包含 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
执行。dirname
该dirname
命令很乐意获取一长串文件或目录,并返回与参数对应的目录列表。
因此,在获取所有这些目录名后,我们将其传递到执行移动的循环中。当然,mv -v
如果您想要有关所发生事件的更详细反馈,您可以使用。