Estou procurando comparar diretórios de temas Drupal. Um tema drupal é um diretório composto por vários arquivos e estou tentando descobrir quais são essenciais. Por exemplo, todos eles 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.
Responder1
Liste 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"
Responder2
Você pode exibir uma lista de nomes classificados pelo número de diretórios em que 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
Responder3
ComCombinarvocê 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.
Responder4
Para 3 diretórios, um deles o atual, e dois 'a' e 'b', você pode encadear o teste assim:
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 contiverem espaços em branco nos nomes dos arquivos.
Usar ls
em Scripts é sempre problemático e normalmente desencorajo usá-lo, mas se você tiver uma visão geral de todos os arquivos do diretório onde a pesquisa começa, e ele não contém espaços em branco, nem caracteres especiais como "*" ou "? ", "<" ou "|", deve ser salvo para utilizá-lo.