Copie os arquivos com a pasta pai para um novo diretório

2

Eu quero copiar alguns arquivos e incluir seu diretório pai no processo.

A estrutura atual é semelhante a:

/Module1/A/downloads/m13312/file.pdf
/Module1/A/downloads/m17312/file.pdf
/Module1/B/downloads/m18312/file.pdf
/Module2/A/downloads/m19312/file.pdf

Eu quero pegar as duas últimas seções do caminho para que eu termine com:

/mydir/m13312/file.pdf
/mydir/m17312/file.pdf
/mydir/m18312/file.pdf
/mydir/m19312/file.pdf

Eu tentei usar cut e awk para obter os resultados corretos, mas parece que não consigo obter o caminho para retornar corretamente. Aqui está um exemplo para apenas ecoar o que preciso (ainda não cheguei à parte de cópia):

find . -type 'f' -path '*downloads*' -print0 | xargs -0 -I {} echo 'cut -d/ -f4-5 <<<{}'

Isso imprime todo o caminho, então sei que não posso usar isso ainda.

    
por John Reid 21.05.2015 / 17:03

2 respostas

2

Se o seu pax suportar a opção -0 :

find . -type 'f' -path '*downloads*' -print0 |
  pax -rw0s'|.*downloads/||' /mydir
    
por 21.05.2015 / 17:23
0

Isso deve ser feito:

for file in /Module*/*/downloads/m13312/file.pdf
do
    file_directory="/mydir/$(basename "$(dirname "$file")")"
    mkdir -p "$file_directory"
    cp "$file" "$file_directory"
done
    
por 21.05.2015 / 17:22