다음 두 디렉터리 사이에서 동일한 파일 이름을 가진 파일을 비교하고 싶다고 가정해 보겠습니다.
/tmp/datadir/dir1/dir2/
그리고
/datadir/dir1/dir2/
필요유형비교하기 전에.
/tmp
나는 현재 해당 디렉토리에 있으며 다음 옵션을 사용하여 실행 해 보았습니다 .find
exec
find datadir -type f -exec sdiff -s <( sort {} ) <( sort "/"{} ) \;
그러나 오류가 발생합니다.
정렬: 열기 실패: {}: 해당 파일이나 디렉터리가 없습니다.
정렬: 열기 실패: /{}: 해당 파일이나 디렉터리가 없습니다.
그러나 다음 명령은 제대로 작동하지만 적절한 비교를 위해 데이터가 정렬되지 않습니다.
find data -type f -exec sdiff -s {} "/"{} \;
이 문제를 어떻게 해결할 수 있나요?
답변1
교체는 코드에서 프로세스 교체() 등의 평가에 의해 {}
수행되고 발생합니다 .find
<(…)
사용 bash -c
:
find datadir -type f -exec \
bash -c 'sdiff -s <( sort "$1" ) <( sort "/$1" )' bash {} \;
또는 bash
파일당 하나의 인스턴스를 실행하지 마세요.
find datadir -type f -exec bash -c '
for file do
sdiff -s <( sort "$file" ) <( sort "/$file" )
done' bash {} +
답변2
-r
모든 정렬과 재귀를 수행하는 (재귀) 옵션 사용을 고려할 수 있습니다 .