encontra o conjunto de arquivos comuns entre vários diretórios?

9

Estou procurando comparar diretórios de temas do Drupal. Um tema drupal é um diretório composto de vários arquivos, e eu estou tentando descobrir quais são essenciais. Por exemplo, todos podem ter um arquivo chamado template.php ou page.tpl.php .

Como posso encontrar o conjunto de todos os arquivos comuns para vários diretórios? No meu caso, todos os arquivos 'mesmos' (aqueles com o mesmo nome) estarão no mesmo diretório de nível.

    
por user394 25.06.2012 / 20:44

4 respostas

7

Lista todos os nomes (não caminhos) de arquivos comuns a todos os diretórios.

dirs=( "A dir" "B dir" "C dir" "D dir" )
find "${dirs[@]}" -maxdepth 1 -type f -name "*" -printf '%f\n' |
  sort | uniq -c | sed -n "s/^ *${#dirs[@]} //p"

Ou chame-o como um arquivo de script ou função, com os diretórios como parâmetros.

find "$@" -maxdepth 1 -type f -name "*" -printf '%f\n' |
  sort | uniq -c | sed -n "s/^ *$# //p"
    
por 25.06.2012 / 21:55
1

Você pode exibir uma lista de nomes classificados pelo número de diretórios em que eles aparecem.

find */ |              # traverse all the template directories
sort -t / -k 2 |       # sort, ignoring the first field
tr '/' '\t' |          # turn / into tabs
uniq -f 1 -c |         # count duplicates, ignoring the first field
tr '\t' '/' |          # turn tabs back into /
sort -t / -s -k 1n     # sort by the number of occurrences
    
por 26.06.2012 / 03:02
0

Com o Meld você pode comparar dois diretórios e ver quais arquivos estão presentes em um e não no outro e vice-versa. Também pode mostrar as diferenças entre os arquivos comuns.

    
por 25.06.2012 / 20:58
0

Para três diretórios, um deles o atual e dois 'a' e 'b', você pode encadear o teste da seguinte forma:

ls a/$(ls b/$(ls *.php) 2>/dev/null) 2>/dev/null

se os arquivos tiverem um padrão comum (como .php) e não contiver espaços em branco em nomes de arquivos.

Usar ls em Scripts é sempre problemático e eu normalmente desestimulo de usá-lo, mas se você tiver uma visão geral sobre todos os arquivos no diretório em que a pesquisa é iniciada e não contiver espaços em branco, nem caracteres especiais como "*" ou "?", "<" ou "|", deve ser salvo para usá-lo.

    
por 25.06.2012 / 22:23

Tags