
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 $value2
en /carpeta de destino/$value1
Respuesta1
La forma en que he hecho esto en el pasado es tar
como 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 tar
toma el --files-from
que 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 tar
cambia a la ruta de destino -C
y descomprime el tarball recibido de la tubería.
Esto da como resultado el siguiente resultado (cuando se usa -v
en 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