Ric*_*ard 22 bash mv folder-redirection
如何将所有子目录中包含的文件移动到当前目录,然后删除空子目录?
我发现了这个问题,但将答案调整为:
mv * .
Run Code Online (Sandbox Code Playgroud)
不工作; 我收到了很多警告,如下所示:
mv: wil and ./wil are identical
Run Code Online (Sandbox Code Playgroud)
子目录中包含的文件具有唯一名称。
Flo*_*enn 33
您还可以使用该-mindepth选项:
find . -type f -mindepth 2 -exec mv -i -- {} . \;
Run Code Online (Sandbox Code Playgroud)
(与-maxdepth您一起还可以限制从中收集文件的层次结构级别。)
我使用mv -i(“交互式”)mv在覆盖文件之前询问。对于很多子目录,您可能会希望收到警告的名称冲突。
该--选项会停止选项处理,因此mv不会被以连字符开头的文件名混淆。
清理整堆空子目录
find . -depth -mindepth 1 -type d -empty -exec rmdir {} \;
Run Code Online (Sandbox Code Playgroud)
小智 8
mv */* .
Run Code Online (Sandbox Code Playgroud)
它将把所有子目录中的所有文件移动到当前目录。
如果您需要一些清理,您可以使用
find . -type d -empty -delete
Run Code Online (Sandbox Code Playgroud)
它将删除所有空子目录。
尝试这个:
find ./*/* -type f -print0 | xargs -0 -J % mv % .
Run Code Online (Sandbox Code Playgroud)
更多信息:单独尝试 find-stament,它应该会给你一个包含你想要移动的所有文件的列表(省略-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
Run Code Online (Sandbox Code Playgroud)
with-print0并且xargs您现在正在创建要执行的语句列表。该-J %标志的意思是,在此处插入列表元素,因此mv $FILE .对找到的每个文件都会执行。
以上适用于 BSD xargs。如果您使用的是 GNU 版本 (Linux)-I %代替-J %
| 归档时间: |
|
| 查看次数: |
32663 次 |
| 最近记录: |