No Linux, usando rename
dos utilitários do Linux ( rename.ul
no Debian e Ubuntu):
rename src dst src/1 src/2/3 # dst/2 must exist
Com o script rename
Perl que o Debian e o Ubuntu instalam como prename
ou rename
:
rename 's!^src!dst!' src/1 src/2/3 # dst/2 must exist
rename 'use File::Basename; use File::Path;
s!^src!dst! && mkpath(dirname($_))' src/1 src/2/3
Aqui está uma função shell que faz o que você está pedindo, exceto pela ordem do argumento:
mv-preserving-structure () {
s=${1%/} t=${2%/}; shift 2
for x; do
case $x in
$s/*)
y=$t${x#$s}
mkdir -p -- "${y%/*}"
mv -- "$x" "$t${x#$s}";;
esac
done
}
mv-preserving-structure src dst src/1 src/2/3