¿Archivos específicos de Linux cp de una lista de texto de archivos a subdirectorios de una lista de texto también?

¿Archivos específicos de Linux cp de una lista de texto de archivos a subdirectorios de una lista de texto también?

Les pido ayuda para solucionar mi problema porque estoy estancado. Te explico la situación: quiero copiar archivos cuya ruta tengo en un archivo txt en subdirectorios específicos especificados en un segundo archivo (también tengo un archivo csv completo que incluye estas 2 columnas: nombre de los subdirectorios ( $value1), ruta del archivo ( $value2))

Pude crear automáticamente los subdirectorios usando este comando:

xargs mkdir -p </scripts/repertoires.csv

Sé cómo copiar todos los archivos a un solo directorio usando este comando:

cat /scripts/fichiers.csv | xargs -I% cp% / destinationfolder

Pero no puedo copiar cada línea correspondiente a un archivo en el subdirectorio que le conviene, para intentar que quede más claro quiero copiar $value2en /carpeta de destino/$value1

Respuesta1

La forma en que he hecho esto en el pasado es tarcomo intermediario, pero estoy seguro de que hay otras respuestas que son más elegantes que esta.

Donde tenemos una lista de archivos que cumplen con un criterio específico, es decir:todos los archivos en /usr menores a 1M

$ find /usr -type f -size -1M

Que queremos copiar a la ubicación /mnt/dst.

Puede utilizar tar como vector para empaquetar/desempaquetar los datos. ES DECIR

$ find /usr -type f -size -1M | tar --files-from=- -c | tar -xv -C /mnt/dst

El primero tartoma el --files-fromque espera una lista línea por línea de rutas completas a los archivos y crea un tarball para la salida estándar.

El segundo tarcambia a la ruta de destino -Cy descomprime el tarball recibido de la tubería.

Esto da como resultado el siguiente resultado (cuando se usa -ven el segundo comando tar).

usr/lib/grub/i386-pc/fdt.lst
usr/lib/python3.6/site-packages/pip/_vendor/html5lib/filters/__init__.py
usr/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/__init__.py
usr/lib/python3.6/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py
usr/lib/python3.6/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py
usr/lib/python3.6/site-packages/pip/operations/__init__.py
usr/lib/python3.6/site-packages/pkg_resources/_vendor/__init__.py
usr/lib/python3.6/site-packages/setuptools/_vendor/__init__.py
usr/lib/python3.6/site-packages/slip/__init__.py
usr/lib/python3.6/site-packages/slip/_wrappers/__init__.py
usr/lib/python3.6/site-packages/asn1crypto/_perf/__init__.py
...
...

El directorio de destino resultante produce el árbol (podado para facilitar la lectura) que debería ser lo que estás buscando.

# tree -L 3 /mnt/dst
/mnt/dst
└── usr
    ├── lib
    │   ├── grub
    │   ├── node_modules
    │   └── python3.6
    ├── lib64
    │   └── python3.6
    ├── local
    │   └── share
    └── share
        ├── crypto-policies
        ├── doc
        ├── groff
        ├── microcode_ctl
        ├── mime
        ├── pki
        ├── texlive
        ├── texmf
        ├── vim
        └── X11

20 directories, 0 files

información relacionada