“ dir / *:没有这样的文件或目录”,带有find -exec ...“ {} / *”

时间:2018-09-28 16:57:08

标签: bash macos find

当前目录包含文件和目录。这些目录没有子目录,但是可以包含零个或多个文件,例如:

identity-tp

执行./file1 ./file2 ./directory1/file3 ./directory2/file4 ./directory2/file5 ./directory3/ 时会得到目录列表:

find . -type d -maxdepth 1

如果我执行./directory1 ./directory2 ,目录1中的所有文件都将移至当前级别mv ./directory1/* .,所以我认为我可以使用find -exec一次完成所有操作:

.

但是我得到这个回应:

find . -type d -maxdepth 1 -exec mv "{}/*" . \;

如何将子目录中的所有文件移动到当前级别?

2 个答案:

答案 0 :(得分:2)

球形(用foo/*foo/dirA等代替foo/dirB等)是由外壳程序 执行的,而不是由mv执行的。 find -exec除非手动启动,否则不会启动外壳程序;例如:

find . -type d -mindepth 1 -maxdepth 1 \
       -exec sh -c 'for dir; do mv -- "$dir"/* .; done' _ {} +

答案 1 :(得分:2)

实际上不需要使用find。您可以使用单个mv来移动文件,而使用rmdir来删除现在为空的目录。

mv */* .
rmdir */