Questão Como usar o comando ls com cd recursivamente


Eu tenho um requisito onde eu preciso validar a estrutura de pastas aninhadas.

Ex: Eu tenho 3 pastas: test1, test2, test3 (Praticamente pode haver qualquer número de tais pastas). Agora todas essas pastas devem conter pastas como V1, V2 ... assim ('V' seguido de número). Sob esta pasta (V1 ...), deve haver apenas dois nomes de pastas 'dummy1' e 'dummy2'.

Portanto, todas essas verificações devem ser feitas recursivamente até que todas as pastas, como teste 1 ... teste2 ... São verificadas.


4


origem




Respostas:


Você poderia usar o encontrar comando. Encontre recurses através de uma estrutura de diretórios fazendo coisas para cada arquivo / diretório. Você pode limitá-lo a diretórios com o sinalizador -type.

find start_dir -type d -print

Para realmente validar todos têm a estrutura, eu acho que você vai ter que escrever um script olhando para esta lista - e eu acho que você teria que fazer isso em uma linguagem de script mais poderosa que o shell, por exemplo. perl, python, ruby, tcl.


3



Eu concordo, mas o requisito está no shell script apenas ... se possível, você pode por favor me dizer ... depois de encontrar o diretório como usar o comando cd recursivamente em que - Ankit
Esse comando listará todos os diretórios, portanto, não há necessidade de recorrer mais. Você então precisa processar a saída - por que apenas um script de shell como esse é um limite artificial - mais do que duas linhas no shell eu escrevo em outra coisa. - Mark
você será capaz de me ajudar nisso, escrevendo em outra ferramenta de script ... desde que eu seja capaz de executá-lo em putty .. - Ankit


Outra opção é o simples árvore comando.

Apenas faça

tree directory/

então 'validar' a saída disso.


1



você pode por favor me dizer sobre como validar isso recursivamente ... como eu preciso ter um script de shell que vai cuidar de tudo isso em um tiro. - Ankit
Ah, então eu acho que um monte de “loops for” com testes variados é o que você quer se você quer que a validação seja feita automaticamente. Eu não sei o quão rigoroso você quer as coisas embora? O test1 só pode conter V {1..X} ou o arquivo 'readme.txt' também é permitido, etc.? - PriceChild
bem, ele conterá apenas V (1..X) - Ankit
Mas então, quanto a números consecutivos ... você pode ter V1, V2, V5, V9000 etc? Não gosto da sua pergunta, receio, não é realmente uma questão, mas um pedido para que façamos o seu trabalho e lhe escrevamos um roteiro. Usar loops bash padrão como 'for' e 'if' deve tornar isso razoavelmente fácil. - PriceChild


teste positivo:

find test* -maxdepth 1 -type d -regex ".*/V[0-9]+" 
find test* -mindepth 2 -maxdepth 2 -type d -regex ".*/V[0-9]+/dummy[12]" 

teste negativo:

find test* -maxdepth 1 -type d -not -regex ".*/V[0-9]+" 
find test* -mindepth 2 -maxdepth 2 -type d -not -regex ".*/V[0-9]+/dummy[12]" 

1



muito obrigado pela sua ajuda .. funcionou dessa forma .... e se eu quiser armazenar isso resulta em um arquivo ... obrigado ANkit - Ankit
encontre o teste * -maxdepth 1 -tipo d -regex ". * / V [0-9] +"> list1 - user unknown
sim eu fiz a mesma coisa alguma coisa como encontrar teste * -maxdepth 1-type d-regex ". * / V [0-9] +" -print> nome do arquivo ..... - Ankit


Tente usar o comando abaixo:

find . -name dummy1 -exec echo "Hello, '{}'" \;
find . -name dummy2 -exec echo "Hello, '{}'" \;

isso dá a saída junto com o PWD.


0