我有目录A和乙。它们每个都包含另一个目录项目.json里面。仅有的项目.json文件持久存在于目录中,因此我无法复制粘贴目录。
A:
./path/Item A/item.json
./path/Item B/item.json
...
./path/Item Z/item.json
乙:
./new/Item A/item.json
./new/Item B/item.json
...
./new/Item Z/item.json
我应该如何将所有 item.json 文件复制到 中的./path/
适当文件夹中./new
?
我的解决方案:
获取目录
ls -l ./path | grep "^d" | cut -d' ' -f 16
那么我可以将结果用作:
for i in `ls -l ./path | grep "^d" | cut -d' ' -f 16`; echo "Dir: $i"; done
所以我可以cp
和他们一起做
for i in `ls -l ./path | grep "^d" | cut -d' ' -f 16`; cp "$i/item.json" "../new/$i/item.json" ; done
这个解决方案还可以,但我相信还有更优雅的方法。
答案1
下面的一行应该可以帮助你。
$ find ./path/ -type f -exec bash -c 'cp $0 ${0/path/new}' {} \;
此处该find
命令搜索./path/
目录中的所有文本文件。当找到文件时,它会调用一个小的 bash 脚本,该脚本/new/
只需将字符串替换为path
to即可将该文件复制到目标目录new
。
答案2
你的解决方案很好!如果你想看其他方案,我的建议就是cp
!
我假设您只想复制“item.json”文件,并且可以不复制其他内容。
cd path; cp --parents */item.json ../new
答案3
使用cpio
(或tar
,但恕我直言,它速度较慢,并且没有-p
像 cpio 那样的选项)!它维护权限、日期等(如果要求的话),当然还维护目录结构。
IE:cd path ; find . | cpio -pvmd ../new