znaleźć zestaw wspólnych plików między kilkoma katalogami?


9

Chcę porównać katalogi motywów Drupala. Motyw drupal jest katalogiem złożonym z kilku plików i staram się dowiedzieć, które z nich są niezbędne. Na przykład wszystkie mogą mieć plik o nazwie template.phplub page.tpl.php.

Jak znaleźć zestaw wszystkich wspólnych plików dla kilku katalogów? W moim przypadku wszystkie „te same” pliki (te o tej samej nazwie) będą znajdować się w tym samym katalogu.


Niektóre odpowiedzi znajdują się w dziale „Łamigłówki” na stronie ukuug.org/newsletter/10.4 (choć są to gry w shell-golfa).
James Youngman

Odpowiedzi:


7

Lista wszystkich nazw (nie ścieżek) plików wspólnych dla wszystkich katalogów.

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"

Lub nazwij go jako plik skryptu lub funkcję, z katalogami jako parametrami.

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

1

Możesz wyświetlić listę nazw posortowaną według liczby katalogów, w których się pojawiają.

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

Dzięki Meld możesz porównać dwa katalogi i zobaczyć, które pliki są obecne w jednym, a nie w drugim i odwrotnie. Może także pokazywać różnice między wspólnymi plikami.


0

W przypadku 3 katalogów, jednego bieżącego i dwóch „a” i „b”, możesz połączyć test w następujący sposób:

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

jeśli pliki mają wspólny wzorzec (jak .php) i nie zawierają białych znaków w nazwach plików.

Korzystanie lsze skryptów jest zawsze problematyczne i zwykle odradzam korzystanie z niego, ale jeśli masz przegląd wszystkich plików w katalogu, w którym rozpoczyna się wyszukiwanie, i nie zawiera białych znaków ani znaków specjalnych, takich jak „*” lub „?” ”,„ <”lub„ | ”, należy zapisać, aby z niego korzystać.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.