Bash: 두 개의 파일 인수를 정렬하여 exec find 옵션 사용

Bash: 두 개의 파일 인수를 정렬하여 exec find 옵션 사용

다음 두 디렉터리 사이에서 동일한 파일 이름을 가진 파일을 비교하고 싶다고 가정해 보겠습니다.

 /tmp/datadir/dir1/dir2/

그리고

 /datadir/dir1/dir2/

필요유형비교하기 전에.

/tmp나는 현재 해당 디렉토리에 있으며 다음 옵션을 사용하여 실행 해 보았습니다 .findexec

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모든 정렬과 재귀를 수행하는 (재귀) 옵션 사용을 고려할 수 있습니다 .

관련 정보