여러 디렉토리 사이의 공통 파일 세트를 찾으십니까?

여러 디렉토리 사이의 공통 파일 세트를 찾으십니까?

Drupal 테마의 디렉토리를 비교하려고 합니다. 드루팔 테마는 여러 개의 파일로 구성된 디렉토리인데, 어떤 파일이 꼭 필요한지 알아보려고 합니다. 예를 들어, 모두 template.php또는 이라는 파일이 있을 수 있습니다 page.tpl.php.

여러 디렉토리에 대한 모든 공통 파일 세트를 어떻게 찾을 수 있습니까? 내 경우에는 모든 '동일한' 파일(동일한 이름의 파일)이 동일한 레벨 디렉토리에 있게 됩니다.

답변1

모든 디렉터리에 공통된 파일의 모든 이름(경로 아님)을 나열합니다.

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"

또는 디렉터리를 매개변수로 사용하여 스크립트 파일이나 함수로 호출하세요.

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

답변2

나타나는 디렉토리 수에 따라 정렬된 이름 목록을 표시할 수 있습니다.

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

답변3

와 함께융합두 개의 디렉토리를 비교하여 어떤 파일이 하나에는 있고 다른 디렉토리에는 없으며 그 반대의 경우도 확인할 수 있습니다. 또한 공통 파일 간의 차이점도 표시할 수 있습니다.

답변4

3개의 디렉터리 중 하나는 현재 디렉터리이고 두 개는 'a'와 'b'인 경우 다음과 같이 테스트를 연결할 수 있습니다.

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

파일에 공통 패턴(예: .php)이 있고 파일 이름에 공백이 포함되어 있지 않은 경우.

스크립트에서 사용하는 것은 ls항상 문제가 있으며 일반적으로 사용하지 않는 것이 좋습니다. 그러나 검색이 시작되는 디렉터리의 모든 파일에 대한 개요가 있고 공백이나 "*" 또는 "?와 같은 특수 문자가 포함되어 있지 않은 경우"입니다. ", "<", "|" 등은 반드시 저장해 두셔야 사용하실 수 있습니다.

관련 정보