¿Cómo muevo todos los archivos de una carpeta (y subcarpetas) usando la línea de comando en Android 7.1+?

Intenté usar este comando:

find /src/dir -type f -exec mv --backup=numbered -t /dst/dir {} +

obtenido de aquí , pero los mensajes de error sugieren findque requiere root en Android. ¿Alguna otra idea sobre cómo lograr esto? Solo quiero los archivos en la carpeta de destino (es decir, sin la estructura del directorio, todos los archivos en un directorio) mientras mantengo la estructura del directorio de origen. He probado Termux, Terminal Emulator y Tasker hasta ahora, sin éxito.

¿Cómo estás ejecutando estos comandos? adb shello alguna aplicación de terminal de terceros?
cp -a /src/dir /dst/dir? Supongo que quieres mantener la estructura del directorio, ¿verdad?
@TimothyLanger He probado Termux, Terminal Emulator y Tasker hasta ahora.
@Izzy No, no lo hago. Solo quiero los archivos solo en la carpeta de destino mientras mantengo la estructura del directorio de origen.
Ah, eso no me quedó claro (el comando utilizado podría haber sido incorrecto;) Lo he integrado con su pregunta, siéntase libre de editar nuevamente si no encaja completamente. Aunque es extraño que findafirme requerir root: he comprobado en dos dispositivos (LP, MM) y no es así. ¿Podría especificar el dispositivo y la versión de Android? Vale la pena intentarlo: busybox find. Si no hay busybox, intente toybox. Alguna variante se está ejecutando en todos los dispositivos que he visto.
Aquí está el error que recibo al probar toybox: 08.23.36/E Ejecutar Shell: -> 08.23.36/E Ejecutar Shell: -> 08.23.36/E Ejecutar Shell: -> 08.23.36/Shell runBackground toybox find /sdcard/Pictures -type f -exec mv /sdcard/Sync {} + root: false timeout: -1 08.23.36/Shell start process-thread ID 65322 08.23.36/E add wait type Shell1 time 2147483647 08.23.36/E add wait type Shell1 hecho 08.23.36/E agregar tarea de espera 08.23.36/E Error: 1
Aquí está el error de Tasker que obtengo al usar busybox: 08.27.47/E Ejecutar Shell: -> 08.27.47/E Ejecutar Shell: -> 08.27.47/E Ejecutar Shell: -> 08.27.47/Shell runBackground busybox find /sdcard/ Imágenes -tipo f -exec mv /sdcard/Sync {} + root: false timeout: -1 08.27.47/Shell start process-thread ID 65335 08.27.47/E add wait type Shell1 time 2147483647 08.27.47/E add wait escriba Shell1 hecho 08.27.47/E agregar tarea de espera 08.27.47/E Error: 127

Respuestas (2)

De acuerdo, después de algunos golpes de cabeza, me di cuenta de que aquí se está cometiendo un error específico de Linux (Android se basa en Linux): cuando escribe la inicial, /src/dirimplica /que está buscando en la raíz del sistema de archivos, montado en /. En este caso, sin embargo, probablemente te estés refiriendo al directorio actual, que probablemente estará allí /sdcard/ya que no estás rooteado. Simplemente omita la primera barra inclinada y estará listo para comenzar (probado personalmente).

find src/dir -type f -exec mv --backup=numbered -t dst/dir {} +

Si encuentra que aún no puede realizar la función (especialmente debido a un error como unrecognized option, asegúrese de instalar la última versión de Linux en lugar de la que está integrada en su kernel. Esto se puede hacer en Termux usandopkg install findutils

Gracias Timoteo. Descubrí la solución, que publicaré en breve.
Hola Timothy, me sale unrecognized optionincluso --backup==numbereddespués de ejecutar pkg install findutilsy reiniciar Termux. ¿Ideas?
¡Ay! Funcionó para mí después de instalar findutils. No tengo más ideas ya que no puedo recrear tu problema. ¡Lo siento!
Pregunté en el Github. coreutilsParece que ahora está en github.com/termux/termux-packages/issues/…

Aquí está la respuesta que logré averiguar:

find /SourceDir -type f -exec mv -i {} /DestinationDir ';'