Copie los primeros n archivos de un directorio a otro

3

Estoy buscando copiar los primeros archivos 'n' de un directorio a otro, preferiblemente solo con herramientas cli (sin scripts).

He intentado lo siguiente:

  • find . -maxdepth 1 -type f | head -5 | xargs cp -t /target/directory

      

    Esto parecía prometedor, pero falló porque el comando osx cp no parece tener el interruptor
    -t

  • exec en unas pocas configuraciones diferentes

      

    Esto probablemente falló por problemas de sintaxis en mi final: /
      Parece que no pude hacer funcionar una selección de tipo head

Cualquier ayuda o sugerencia sería apreciada.

Gracias de antemano!

    
pregunta visyoual 13.09.2018 - 17:26

2 respuestas

4

Necesitas la opción -J con xargs .

find . -maxdepth 1 -type f | head -n5 | xargs -J X cp X /target/directory

La opción J coloca todos los nombres de archivo en el marcador de posición X, que puede ser cualquier carácter (es) y cp acepta varios archivos en un directorio de destino. Se puede visualizar como-

cp file1 file2 file3 file4 file5 DESTINATION

EDITAR:

Para manejar los nombres de archivo con espacios, tenemos que encontrar el carácter nulo después de cada nombre de archivo y luego hacer que xargs maneje el bit nulo.

 find . -maxdepth 1 -type f -print0 | head -n5 | xargs -0 -J X cp X /target/directory
    
respondido por el fd0 13.09.2018 - 18:01
0

Encontré una solución diferente sin xargs o -exec pero creo que la respuesta de fd0 es una mejor manera de avanzar:

while IFS= read -r f; do cp "$f" "/target/directory/"; done < <(find . -maxdepth 1 -type f | head -n5)
    
respondido por el user3439894 13.09.2018 - 18:18

Lea otras preguntas en las etiquetas