I have the following directory structure:
dir1 +-- _class1 | +-- _i | +-- _ii | +-- _iii | +-- _... +-- _class2 | +-- _i | +-- _ii | +-- _iii | +-- _... +-- _class3 | +-- _i | +-- _ii | +-- _iii | +-- _... +-- _...
Each class contains the exact same directories, and the directories contain png files.
What I want to do is copy the contents from dir1 to dir2 such that dir2 has the following format:
dir2 +-- _i | +-- _ii | +-- _iii | +-- _...
For example: dir2/i/*.png should contain all the files in dir1/class1/i/*.png, dir1/class2/i/*.png, dir1/class3/i/*.png, etc…
I have tried doing the following:
for dir in dir1/*/; do
cp -r dir1 dir2;
done
But I get the following structure instead:
dir2 +-- _i | +-- _ii | +-- _iii | +-- _... | +-- _class2 | +-- _i | +-- _ii | +-- _iii | +-- _... +-- _class3 | +-- _i | +-- _ii | +-- _iii | +-- _... +-- _... | +-- _i | +-- _ii | +-- _iii | +-- _...
It seems to only work on the first directory and then it proceeds to create other directories instead of copying them into the already existing directory structure.
What’s the best way to go about doing this in bash?
Advertisement
Answer
The wildcard needs another level to match the i, ii, etc. directories.
for dir in dir1/*/*/; do
cp -R "$dir" dir2
done