当前目录包含文件和目录。这些目录没有子目录,但是可以包含零个或多个文件,例如:
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 "{}/*" . \;
如何将子目录中的所有文件移动到当前级别?
答案 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 */