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.


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"

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

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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.