在群晖或其他 Linux 系统中,你可以使用 find 命令来递归查找子文件夹,并将它们移动到上层目录。这是一种非常高效的方法,适合批量操作。

假设

  • 共享文件夹路径为 /volume1/share
  • 你想将 /volume1/share 中每个子文件夹里的子文件夹移动到它的上层目录。

以下是实现的步骤和命令:


步骤 1:切换到目标共享文件夹路径

cd /volume1/share

步骤 2:使用 findmv 一键移动子文件夹到上层

运行以下命令:

find . -mindepth 2 -type d -exec mv -t ./ {} +

说明:

  1. find .:从当前目录开始递归查找。
  2. -mindepth 2:只查找深度为 2 或更深的子文件夹(避免移动根目录下的文件夹)。
  3. -type d:仅匹配文件夹。
  4. -exec mv -t ./ {} +
    • mv -t ./ 将找到的文件夹移动到当前目录(根目录)。
    • {}find 匹配到的每个文件夹。
    • + 表示以批量方式处理,提高效率。

步骤 3:检查结果

运行以下命令检查移动后的结构:

ls -R

步骤 4(可选):清理空目录

如果需要删除多余的空文件夹,可以运行以下命令:

find . -type d -empty -delete

示例操作

假设原目录结构如下:

bash复制编辑/volume1/share
├── Folder1
│   ├── SubFolderA
│   ├── SubFolderB
├── Folder2
│   ├── SubFolderC
│   ├── SubFolderD

运行上述命令后,目录结构将变为:

bash复制编辑/volume1/share
├── SubFolderA
├── SubFolderB
├── SubFolderC
├── SubFolderD

注意事项

  1. 备份数据:在大批量移动文件之前,建议先备份数据,以防误操作。
  2. 权限问题:如果遇到权限问题,可以使用 sudo 提升权限:
  3. sudo find . -mindepth 2 -type d -exec mv -t ./ {} +
  4. 测试运行:在实际操作前,可以用以下命令测试会匹配到哪些文件夹:
  5. find . -mindepth 2 -type d

这个方法适合绝大多数场景,尤其是文件夹结构复杂的时候!

too many arguments问题的解决方法
中文:参数太多

原因分析:

filename中的空格回车等迷惑了bash。
如果环境变量没放在双引号中,那么bash 会认为条件中的自变量过多。

解决方法:
可以用双引号将字符串自变量括起来消除该问题,给命令执行部分加上双引号即可:

cd “/media/linux/VMware Tools”

作者 root

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注