Eu uso a seguinte linha para encontrar todos os subdiretórios do PWD e executar svnadmin verify
em cada diretório (eu já sei que eles são repositórios do Subversion)
find ./* -maxdepth 0 -exec svnadmin verify {} \;
Isso funciona bem, além do fato de que a saída se parece com isso:
* Verifying repository metadata ...
* Verifying metadata at revision 1 ...
* Verifying metadata at revision 2 ...
* Verifying metadata at revision 4 ...
* Verifying metadata at revision 5 ...
* Verifying metadata at revision 6 ...
* Verifying metadata at revision 9 ...
* Verifying metadata at revision 10 ...
* Verifying metadata at revision 12 ...
* Verifying metadata at revision 14 ...
* Verifying metadata at revision 15 ...
* Verifying metadata at revision 18 ...
* Verifying metadata at revision 20 ...
* Verifying metadata at revision 22 ...
* Verified revision 0.
* Verified revision 1.
* Verified revision 2.
* Verified revision 3.
* Verified revision 4.
* Verified revision 5.
* Verified revision 6.
* Verified revision 7.
* Verified revision 8.
* Verified revision 9.
* Verified revision 10.
* Verified revision 11.
* Verified revision 12.
* Verified revision 13.
* Verified revision 14.
* Verified revision 15.
* Verified revision 16.
* Verified revision 17.
* Verified revision 18.
* Verified revision 19.
* Verified revision 20.
* Verified revision 21.
* Verified revision 22.
* Verified revision 23.
* Verified revision 0.
* Verifying repository metadata ...
* Verifying metadata at revision 4 ...
* Verifying metadata at revision 5 ...
* Verifying metadata at revision 6 ...
* Verifying metadata at revision 7 ...
* Verifying metadata at revision 9 ...
* Verified revision 0.
* Verified revision 1.
* Verified revision 2.
* Verified revision 3.
* Verified revision 4.
* Verified revision 5.
* Verified revision 6.
* Verified revision 7.
* Verified revision 8.
* Verified revision 9.
Eu realmente gostaria find
de imprimir o nome do arquivo antes de executar o svnadmin verify
comando, para facilitar o registro.
Eu tentei me espremer um pouco ls
, mas entendi, como devo fazer isso (de preferência simplesmente)?
command-line
bash
scripts
find
Arronical
fonte
fonte
'%p'
para'%p\n'
para que o nome preceda a saída de verificação em sua própria linha.-printf '%p\n'
com o mais simples-print
find -name <a_name> -print -exec command {} \;
Se você não quiser se recuperar, não há sentido em usá-lo
find
. É muito mais simples fazê-lo diretamente no shell:O
for d in */
irá encontrar todos os diretórios (*/
garante apenas diretórios e nenhum arquivo foi encontrado); oecho "$d"
imprimirá o nome do diretório; osvnadmin verify "$d"
irá verificar o diretório.Isso pode ser executado diretamente da linha de comando ou de um script sem alteração no formato.
fonte
find
muito. Obrigado por melhorar meu conhecimento!dotglob
eglobstar
no bash, o que cria um script mais longo e complicado. Costumo guardar globs para grandes tarefas complicadas, enquantofind
a sintaxe é mais fácil de se juntar rapidamente, juntando vários filtros e comandos em uma única linha.find
mais simples. Eu sempre prefiro os globs,find
pois não apenas os acho muito mais simples, mas também são mais seguros ao lidar com nomes de arquivos arbitrários que são passados para outros programas.Eu adicionei
-type d
se são apenas diretórios.fonte
{}
, pelo menos emsvnadmin verify {}
-exec
spawn é gerado por um shell filho, no qual os 2 comandos são executados, usando;
como fim de linha?Tente o seguinte:
Se você quiser apenas diretórios (Graças à @kos note):
fonte
for f in */
processará apenas diretórios. -maxdepth 1
vez de./*
, você precisa apenas do primeiro nível na estrutura de pastas-type d
, você precisa apenas de pastas! -name "."
, você não precisa.
-exec
para iniciar um shellsh -c
para iniciar comandos dentro do shellSeu comando
ou mais curto
-prune
se o arquivo for um diretório, não desça neleSeu comando
fonte
-prune
parece interessante. Eu costumava./* -maxdepth 0
evitar retornar.
do comando find. Não causa nenhum erro crítico, mas prefiro não ter isso na minha saída.find
possui sinalizadores de opção para impressão, que já são mencionados em outras respostas. Se olharmos para o problema da perspectiva de executar vários comandos para o mesmo arquivo processado atualmente,find
permite o uso de várias-exec
instruções. Isso significa que poderíamos optar por usar:Mais uma vez, nota que esta abordagem é aplicável não apenas para imprimir com
echo
,printf
ou outras utilidades, mas também outros comandos.fonte
Pode ser útil canalizar a
find
saída pararead
loop:Permite executar uma sequência de comandos composta mais complicada com nomes de arquivos retornados por
find
, como nestels
exemplo elegante :fonte
Isso imprimirá o nome e o conteúdo dos arquivos somente recursivamente.
fonte