¿Cuál sería una buena manera de mover un tipo de archivo desde un directorio y todos sus subdirectorios?
Como "mover todo * .ogg in/thisdir recursivamente a/somedir". Probé un par de cosas; mi mejor esfuerzo fue (todavía no tan bueno):
find /thisdir -type f -name '*.ogg' -exec mv /somedir {} \;
Regresó en cada línea antes de cada nombre de archivo,
mv: cannot overwrite non-directory `/thisdir/*.ogg' with directory `/somedir'
puedes usar find with xargs para esto
find /thisdir -type f -name "*.ogg" -print0 | xargs -0 -Imysongs mv -i mysongs /somedir
El -I en el comando anterior le dice a xargs qué cadena de reemplazo desea usar (de lo contrario, agrega los argumentos al final del comando).
OR
En su comando solo intente mover '{}' después del comando mv
.
find /thisdir -type f -name '*.ogg' -exec mv -i {} /somedir \;
find /thisdir -type f -name "*.ogg" -exec mv {} /somedir \;
Intercambiaste un poco los argumentos para mv
En zsh o bash 4, para reunir todos *.ogg
archivos en /somedir
:
mv /thisdir/**/*.ogg /somedir
Si desea reproducir la jerarquía de directorios: (advertencia, escrita directamente en el navegador)
rsync -a --Prune-empty-dirs --include='*/' --include='*.ogg' --exclude='*' /thisdir /somedir