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

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

Preciso mover dois arquivos específicos, vamos chamá-los de fileA.txt e fileB.sh para 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 é assim:Hierarquia de pastas

A pasta pai é única e deve permanecer a mesma. Existem mais de 2.000 pastas no total localizadas em subpastas de 200 a 300 pastas pais contendo as pastas filhas

O que tenho até agora que no BASH não está funcionando é:

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

Sou MUITO novo em scripts e sei que esta é uma tarefa muito simples. Peço desculpas pelo desenho horrível, mas bati a cabeça na parede por muito tempo.

Responder1

Para mover qualquer arquivo nomeado fileA.txtou fileB.txtpara seu diretório pai imediato:

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

Ou, para mover qualquer arquivo nomeado fileA.txtou fileB.bbpara seu diretório pai imediato:

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

Como funciona

  • .diz findpara começar com o diretório atual. (Você pode substituí-lo por qualquer diretório que desejar.

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

  • -type f diz findpara procurar apenas arquivos regulares.

  • -name 'file[AB].txt'diz findpara procurar apenas arquivos que correspondam ao glob file[AB].txt.

    Alternativamente, para corresponder um fileA.txtou fileB.bb, usamos dois -nametestes combinados com um ou lógico ( -o) e agrupados com parênteses:

    \( -name 'fileA.txt' -o -name 'fileB.bb' \)
    
  • -execdir mv {} ../ \;diz findpara chdir o diretório do arquivo e executar o comando shell mv {} ../onde findsubstituirá {}pelo nome real do arquivo. A expressão ../é de linguagem Unix para diretório pai. O final \;apenas marca findo final do comando shell

informação relacionada