替换维护路径的一堆文件

替换维护路径的一堆文件

我有目录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/只需将字符串替换为pathto即可将该文件复制到目标目录new

答案2

你的解决方案很好!如果你想看其他方案,我的建议就是cp

我假设您只想复制“item.json”文件,并且可以不复制其他内容。

cd path; cp --parents */item.json ../new

答案3

使用cpio(或tar,但恕我直言,它速度较慢,并且没有-p像 cpio 那样的选项)!它维护权限、日期等(如果要求的话),当然还维护目录结构。

IE:cd path ; find . | cpio -pvmd ../new

相关内容