Como você pode mover ou copiar arquivos específicos de uma lista de arquivos de texto?

3

Portanto, tenho um diretório de 200 dos seguintes tipos de arquivos:

gre_6_c1_d34567.h3
gre_6_c1_d95543.h3
gre_6_c1_d42354.h3
gre_6_c1_d01452.h3
gre_6_c1_d23168.h3
gre_6_c1_435435.h3

A única diferença entre esses arquivos são os números após d . Eu tenho um arquivo de texto que contém apenas o d number para como 50 desses arquivos. Se eu pudesse obter o nome do arquivo inteiro, eu o faria, mas esse arquivo de texto é a saída de outro script. Existe uma maneira de mover esses arquivos para outro diretório usando o número d do arquivo de texto?

    
por e1v1s 17.05.2016 / 16:59

2 respostas

0

Usando sed e flag:

sed 's|^\(.*\)$|mv gre_6_c1_.h3 newdir/|e' list.txt

Acima, moverá os arquivos para newdir/ para alterá-lo de acordo.

Eu assumo no list.txt que o número é como abaixo, separado por nova linha:

d34567
d23168

Execute isto para confirmar:

sed 's|^\(.*\)$|mv gre_6_c1_.h3 newdir/|' list.txt
    
por 17.05.2016 / 17:16
0

Com bash 4, você poderia carregar uma matriz com nomes de arquivos derivados dos números no arquivo "driver" e depois usar a opção -t do GNU mv para movê-los para um diretório de uma só vez. Nota

#read contents of driver_file into an array arr using mapfile
mapfile -t arr <driver_file

#define prefix and suffix variables
prefix=gre_6_c1_d
suffix=.h3

#prefix each array element
arr=("${arr[@]/#/$prefix}")

#suffix each array element
arr=("${arr[@]/%/$suffix}")

#use GNU mv's -t facility to move files into newdir
mv -t newdir/ "${arr[@]}"
    
por 17.05.2016 / 19:20

Tags