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

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

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항상 문제가 있으며 일반적으로 사용을 권장하지 않습니다. 그러나 검색이 시작되는 디렉터리에 있는 모든 파일에 대한 개요가 있고 공백이나 "*" 또는 "? " 그런 특수 문자. ", "<" 또는 "|"는 사용하기 전에 저장해야 합니다.

관련 정보