Usando vários curingas no caminho para executar o comando em todos os arquivos no diretório

0

Estou tentando executar um loop for que copia todos os arquivos em um diretório e, em seguida, os coloca em um diretório de backup. Existem vários subdiretórios com nomes variados, então eu pensei que deveria usar vários curingas para que eu não tivesse que listar todos eles e adicionar outro loop para dentro. Este é o meu script

#!/bin/bash

DIR="/home/users/data/*"

for file in $DIR
do
        cp "$file"/**/**/*.txt* "$DIR"/backup/"$file"
done

Quando eu o executo, o script não pode entrar nos subdiretórios e acha que o diretório é

/directory1/**/**/*.txt*

Qualquer conselho seria muito apreciado

    
por M76 12.10.2018 / 05:46

2 respostas

0

Acho que seria melhor usar find aqui:

for FILE in $DIR
do
    find $DIR -iname '*.txt' -exec cp -fv {} ${DIR}/backup/${FILE} \;
done

Você pode adicionar a opção --parents a cp se quiser preservar a estrutura de diretórios.

    
por 12.10.2018 / 09:42
0

Se você quiser apenas duplicar /home/users/data em /home/users/data/backup :

rsync -ai --exclude=/backup/ /home/users/data/ /home/users/data/backup

Isso também excluiria o diretório backup de ser copiado ao executar novamente o comando. Observe que o diretório de origem (e o diretório no padrão de exclusão) deve ter barras no final.

    
por 12.10.2018 / 09:56