
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.txt
ou fileB.txt
para seu diretório pai imediato:
find . -maxdepth 4 -type f -name 'file[AB].txt' -execdir mv {} ../ \;
Ou, para mover qualquer arquivo nomeado fileA.txt
ou fileB.bb
para seu diretório pai imediato:
find . -maxdepth 4 -type f \( -name 'fileA.txt' -o -name 'fileB.bb' \) -execdir mv {} ../ \;
Como funciona
.
dizfind
para começar com o diretório atual. (Você pode substituí-lo por qualquer diretório que desejar.-maxdepth 4
dizfind
para não descer mais de quatro níveis na estrutura de diretórios.-type f
dizfind
para procurar apenas arquivos regulares.-name 'file[AB].txt'
dizfind
para procurar apenas arquivos que correspondam ao globfile[AB].txt
.Alternativamente, para corresponder um
fileA.txt
oufileB.bb
, usamos dois-name
testes combinados com um ou lógico (-o
) e agrupados com parênteses:\( -name 'fileA.txt' -o -name 'fileB.bb' \)
-execdir mv {} ../ \;
dizfind
para chdir o diretório do arquivo e executar o comando shellmv {} ../
ondefind
substituirá{}
pelo nome real do arquivo. A expressão../
é de linguagem Unix para diretório pai. O final\;
apenas marcafind
o final do comando shell