Mover dois arquivos específicos para sua pasta pai em vários diretórios com nomes exclusivos

2

Eu preciso mover dois arquivos específicos, vamos chamá-los de fileA.txt e fileB.sh em sua pasta pai.

Um desses arquivos é genérico, mas o outro arquivo é específico da pasta pai e não pode ser copiado para todas as pastas.

A hierarquia de pastas é semelhante a: Hierarquia de pastas

A pasta pai é única e precisa permanecer a mesma. Existem mais de 2000 pastas localizadas em subpastas de 200 a 300 pastas pai contendo as pastas filhas

O que eu tenho até agora é que em BASH isso não funciona:

find -maxdepth 4 -type f -name ‘*.bb’ ‘*.txt’; mv ../.

Eu sou muito novo em scripts e sei que esta é uma tarefa muito simples. Peço desculpas pelo terrível desenho, mas bati com a cabeça contra a parede por muito tempo.

    
por J.Mike 01.03.2018 / 23:10

1 resposta

3

Para mover qualquer arquivo chamado fileA.txt ou fileB.txt para o diretório pai imediato:

find . -maxdepth 4 -type f -name 'file[AB].txt' -execdir mv {} ../ \;

Ou, para mover qualquer arquivo chamado fileA.txt ou fileB.bb para o diretório pai imediato:

find . -maxdepth 4 -type f \( -name 'fileA.txt' -o -name 'fileB.bb' \) -execdir mv {} ../ \;

Como funciona

  • . informa find para iniciar com o diretório atual. (Você pode substituir isso por qualquer diretório que desejar.

  • -maxdepth 4 diz a find para não descer mais de quatro níveis na estrutura de diretórios.

  • -type f diz a find para procurar apenas por arquivos regulares.

  • -name 'file[AB].txt' diz a find para procurar apenas por arquivos que correspondam ao glob file[AB].txt .

    Como alternativa, para corresponder a fileA.txt ou fileB.bb , usamos dois -name testes combinados com um lógico ou ( -o ) e agrupados com parens:

    \( -name 'fileA.txt' -o -name 'fileB.bb' \)
    
  • -execdir mv {} ../ \; diz a find para acessar o diretório do arquivo e executar o comando shell mv {} ../ onde find substituirá {} pelo nome real do arquivo. A expressão ../ é o idioma do Unix para o diretório pai. O trailing \; simplesmente marca find no final do comando shell

por 01.03.2018 / 23:14