如何移动使用pattern找到的文件并移动到UNIX中的另一个子目录

时间:2019-07-01 20:41:03

标签: unix find xargs

我有这个:

.
├── 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并将其从子目录Brief移到子目录Studies(如果不存在则创建文件),两者都处于同一级别。

当我这样做:

find . -name '*.xlsx' -exec mv '{}' ../Studies ';'

我知道了

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

1 个答案:

答案 0 :(得分:1)

您不应使用..来获取匹配文件的父目录,而应使用dirname

find . -name "*.xlsx" -exec sh -c 'mv {} "$(dirname $(dirname {}))/Studies/"' \;

尝试一下! :)