![如何编写 shell 脚本来扁平化目录?](https://linux22.com/image/155841/%E5%A6%82%E4%BD%95%E7%BC%96%E5%86%99%20shell%20%E8%84%9A%E6%9C%AC%E6%9D%A5%E6%89%81%E5%B9%B3%E5%8C%96%E7%9B%AE%E5%BD%95%EF%BC%9F.png)
我编写了一个简单的脚本来使用该命令从目录中删除无用的文件find
。
现在我想知道是否可以在脚本中添加行来展平目录,但不能完全地压扁了。
例如,如果我有一个名为的大目录cleantarget
:
- 清洁目标
- 文件夹A
- 文件夹A1
- 文件夹A2
- 文件夹B
- 文件夹B1
- 文件夹B11
- 文件夹B1
- 文件夹A
我希望最终结果是:
- 清洁目标
- 文件夹A
- 文件夹B
我不希望结果是:
- 清洁目标
- 我的所有文件
该目录中有 16000 个文件,因此最好使用脚本来执行此操作,这样当目录再次混乱时我可以偶尔运行它。
我该怎么做呢?
编辑:本质上,这意味着:我想要一个脚本,它将分别展平给定目标目录中的每个子目录。即,展平文件夹 A、展平文件夹 B、展平文件夹 C,依此类推,直到cleanfolder
展平其中的所有目录。
答案1
这些行应该有效:
find "/path/to/cleantarget" -maxdepth 1 -mindepth 1 -type d | while read line; do
find "${line}" -mindepth 2 -type f -exec mv -t "${line}" -i '{}' +
rm -r "${line}"/*/
done
这将展平文件夹 A 和文件夹 B,询问您是否要覆盖重复项,然后删除文件夹。