如何在unix中移动使用模式找到的文件并移动到另一个子目录

如何在unix中移动使用模式找到的文件并移动到另一个子目录,unix,find,xargs,Unix,Find,Xargs,我有这个: . ├── dirA │   └── ProdA │   ├── Brief │   │   └── Form.xlsx │   ├── Results │   └── Studies └── dirB └── BrandB └── ProdB ├── Brief │   └── Form.xlsx └── Results 我想要这个: . ├── dir

我有这个:

.
├── dirA
│   └── ProdA
│       ├── Brief
│       │   └── Form.xlsx
│       ├── Results
│       └── Studies
└── dirB
    └── BrandB
        └── ProdB
            ├── Brief
            │   └── Form.xlsx
            └── Results
我想要这个:

.
├── dirA
│   └── ProdA
│       ├── Brief
│       ├── Results
│       └── Studies
│           └── Form.xlsx
└── dirB
    └── BrandB
        └── ProdB
            ├── Brief
            └── Results
            └── Studies  
                └── Form.xslx         
因此,基本上我必须找到Form.xlsx文件,并将其从子目录摘要移动到子目录研究(如果它不存在,则创建它),两者都处于同一级别

当我这样做时:

find . -name '*.xlsx' -exec mv '{}' ../Studies ';'
我得到:

.
├── dirA
│   └── ProdA
│       ├── Brief
│       ├── Results
│       └── Studies
└── dirB
    └── BrandB
        └── ProdB
            ├── Brief
            └── Results

您不应该使用
要获取匹配文件的父目录,请改用
dirname

find-名称“*.xlsx”-exec sh-c'mv{}”$(dirname$(dirname{}))/Studies/“\;

试试看!:)

不知道为什么有人否决了这个问题。在目录问题上比一般人好得多!但是如果没有目标目录存在,我希望
mv{}../Studies
只是将文件重命名为
Studies
,它将无法读懂您的想法并生成目录。最好循环通过目标目录,chk<代码>为d英寸*;如果有,就去做![-d./path/$d/Studies];然后mkdir路径/$d/研究;fi;完成或类似操作。然后运行
find
命令。祝你好运