如何在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
命令。祝你好运