encuentra el conjunto de archivos comunes entre varios directorios?

9

Estoy buscando comparar directorios de temas de Drupal. Un tema de drupal es un directorio compuesto por varios archivos, y estoy tratando de descubrir cuáles son esenciales. Por ejemplo, todos pueden tener un archivo llamado template.phpo page.tpl.php.

¿Cómo puedo encontrar el conjunto de todos los archivos comunes para varios directorios? En mi caso, todos los 'mismos' archivos (los del mismo nombre) estarán en el mismo directorio de nivel.

usuario394
fuente
Hay algunas respuestas en la sección 'Rompecabezas de Shell' de ukuug.org/newsletter/10.4 (aunque son shell-golf-ish).
James Youngman

Respuestas:

7

Lista todos los nombres (no rutas) de archivos comunes a todos los directorios.

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"

O llámelo como un archivo de script o función, con los directorios como parámetros.

find "$@" -maxdepth 1 -type f -name "*" -printf '%f\n' |
  sort | uniq -c | sed -n "s/^ *$# //p"
Peter.O
fuente
1

Puede mostrar una lista de nombres ordenados por la cantidad de directorios en los que aparecen.

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
Gilles 'SO- deja de ser malvado'
fuente
0

Con Meld puede comparar dos directorios y ver qué archivos están presentes en uno y no en el otro y viceversa. También puede mostrar las diferencias entre los archivos comunes.

Bernhard
fuente
0

Para 3 directorios, uno de ellos el actual y dos 'a' y 'b', puede encadenar la prueba de esta manera:

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

si los archivos tienen un patrón común (como .php) y no contienen espacios en blanco en los nombres de archivo.

El uso lsen Scripts siempre es problemático y normalmente desaconsejo usarlo, pero si tiene una descripción general de todos los archivos en el directorio donde comienza la búsqueda, y no contiene espacios en blanco, ni caracteres especiales como "*" o "? "," <"o" | ", debe guardarse para usarlo.

usuario desconocido
fuente