UNIX shell scripting: how to recursively move files up one directory?
Solution 1:
It's fairly simple with GNU find (as found on Linux) or any other find that supports -execdir
:
find A -type f -execdir mv -i {} .. \;
With a standard find
:
find A -type f -exec sh -c 'mv -i "$1" "${1%/*}/.."' sh {} \;
With zsh:
zmv -Q -o-i 'A/(**/)*/(*)(.)' 'A/$1$2'
If the directory structure always has the same nesting level, you don't need any recursive traversal (but remove empty directories first):
for x in */*; do; echo mv -i "$x"/*/* "$x"/..; done
Solution 2:
For that set of files, this would do:
$ cd /A/B/C/
$ mv ./* ../
But I'm expecting that your problem is somewhat more complicated... I can't answer to this... I'm not quite sure how your dir structure is... Could you clarify?