
특정 문자열 교체를 무시하고 두 디렉터리를 재귀적으로 비교하고 싶습니다.
예를 들어, 한 디렉터리의 일부 파일에는 "abcd"라는 문자열이 포함되어 있는 반면, 다른 디렉터리에서는 동일한 파일에서 "abcd"의 이름이 "wxyz"로 변경되었습니다. "abcd"를 "wxyz"로 이름을 바꾸는 것을 제외하고 두 디렉터리 간의 모든 차이점을 확인하고 싶습니다.
이 경우 대체 길이는 실제로 원래 길이("abcd" 및 "wxyz")와 동일하지만, 다른 문자열 길이에 대한 일반적인 솔루션도 흥미로울 것입니다.
어떻게 해야 하나요?
답변1
이 문제를 해결하는 한 가지 방법은 파일 세트 중 하나를 전처리하는 것입니다(귀하의 질문에 따르면 모든 폴더1의 파일에는ABCD그리고 Folder2의 파일에는 다음이 있을 수 있습니다.시시.
예를 들어 find
트리 내에서 파일 검색을 수행할 수 있습니다.폴더 1, 이를 스크립트에 제공합니다.
스크립트 내에서 입력 파일에 대해 대체를 실행하고 결과를 diff로 파이프하여 해당 파일을 비교합니다.표준 입력다른 트리의 해당 파일과 함께.
두 트리 모두에 파일 세트가 있다고 가정합니다. 그렇지 않은 경우 이를 처리하기 위한 코드를 추가할 수 있습니다( diff
도움이 될 수 있는 플래그가 거기에 있습니다).
최소 버전은 다음과 같습니다(예를 들어 여러 대체 항목을 추가할 수 있음). 또한 대체 코드가 하위 문자열이 아닌 단어만 변경하는 등 필요한 작업을 수행하는지 확인해야 합니다.
find folder1 -type f -printf "%P\n" |
while read myfile
do
sed 's/abcd/wxyz/g' folder1/$myfile | diff -u folder2/$myfile -
done
더 깔끔한 방법이 있을 수 있지만 이는 논리를 추가할 수 있는 위치를 명확하게 보여줍니다.