Answers:
你也可以使用 -mindepth
选项:
find . -type f -mindepth 2 -exec mv -i -- {} . \;
(和...一起 -maxdepth
您还可以限制从中收集文件的层次结构级别。)
我用了 mv -i
(“互动”) mv
在覆盖文件之前询问。有很多子目录,可能会有你想要警告的名字冲突。
该 --
选项停止选项处理,所以 mv
不会被以连字符开头的文件名弄糊涂。
清理整堆空子目录
find . -depth -mindepth 1 -type d -empty -exec rmdir {} \;
-n, --no-clobber
:不要覆盖现有文件。你可能感兴趣 -b, --backup
也是。
试试这个:
find ./*/* -type f -print0 | xargs -0 -J % mv % .
更多信息:单独尝试查找 - 它应该为您提供一个列表,其中包含您要移动的所有文件(请忽略 -print0
)。例:
probe:test trurl$ find ./*/* -type f
./test_s/test_s_s/testf4
./test_s/test_s_s/testf5
./test_s/testf1
./test_s/testf2
./test_s/testf3
./test_s2/testf6
./test_s2/testf7
同 -print0
和 xargs
您现在正在创建要执行的语句列表。该 -J %
flag表示,在这里插入list元素,所以 mv $FILE .
对找到的每个文件执行。
以上是为BSD xargs工作的。如果你正在使用GNU版本(Linux) -I %
代替 -J %