A pergunta não é muito clara, mas provavelmente você só quer fazer
cp -v /mnt/data/files/xyz/*_5 /mnt/data/files/abc/*_7 /mnt/data/myname/new/
Estou tentando copiar vários arquivos com nomes diferentes de diretórios diferentes para um mesmo novo diretório. Os nomes dos diretórios são os mesmos que o início de cada nome de arquivo. Por exemplo, do diretório /mnt/data/files/xyz
, eu quero copiar o arquivo xyz_5
para o diretório /mnt/data/myname/new
. No diretório /mnt/data/files/abc
, desejo copiar o arquivo abc_7
no diretório /mnt/data/myname/new
.
Eu tenho 60 arquivos para os quais preciso fazer isso. O que eu faço agora:
cd /mnt/data/files/xyz;
cp -v *_5 /mnt/data/myname/new
Eu faço isso para cada arquivo. Mas posso fazer isso com um único pedaço de código?
A pergunta não é muito clara, mas provavelmente você só quer fazer
cp -v /mnt/data/files/xyz/*_5 /mnt/data/files/abc/*_7 /mnt/data/myname/new/
Um loop for simples pode fazer o trabalho:
for i in /mnt/data/files/*; do
[ -d "$i" ] && cp -v "${i}/${i}_5" /mnt/data/myname/new/
done
O loop for é executado através do conteúdo do diretório /mnt/data/files/
. Dentro do loop [ -d "$i" ]
verifica se o item é um diretório. Se sim, copie o arquivo nesse diretório com o mesmo nome que o diretório e terminando com _5
no diretório de destino /mnt/data/myname/new/
.
Tags command-line cp