答案1
find -type f -execdir mv "{}" ../ \;
类似于-execdir
,-exec
但是在特定文件所在的目录中完成其工作,因此该../
部分可以按您需要工作。
为了摆脱空dir2
,dir4
在您的示例中,您需要另一个专门的命令,但主要任务已经完成。
答案2
for x in */* ; do [ -d $x ] && ( echo cd $x ; echo pwd ; echo mv * .. ; echo cd ../.. ) ; done
喜欢所看到的内容吗?然后删除该词echo
(从多个位置)
可能并非在所有情况下都有效,例如,如果使用了符号链接。使用 OpenBSD ksh 测试(初步结果在手动目视检查中看起来不错——我没有删除echo
命令)。
请注意,[
是一个命令;它与共享相同的手册页test
(尽管它是 shell 的内部命令,因此您需要使用 shell 的手册页并搜索有关该命令的文档。)
答案3
你开始得正确。但是你可以结合谓词稍微扩展一下,-type
只获取文件。使用和你拥有xargs
的丰富能力bash
find . -maxdepth 3 -mindepth 3 -type f |xargs -n1 bash -c 'cd $(dirname $0) ; mv $0 ..'
$0
是 xargs 传递的位置参数bash
。要实时观察,可以使用as-t
选项xargs
-tn1
-mindepth $D
注意:我使用和限制了搜索的深度-maxdepth $D
,请根据您的要求随意更改。
注2:Kamil 的回答(使用-execdir
实际上是一种更好的解决方案)。