`sed`는 액세스된 모든 파일의 메타데이터를 업데이트합니다.

`sed`는 액세스된 모든 파일의 메타데이터를 업데이트합니다.

한때 sed -i 's/oldpat/newpat/g' ~/mydir/**/*.txt일부 텍스트 파일에서 일부 str을 교체했습니다.

그런데 모든 파일(내용이 변경되지 않은 파일 포함)의 수정 날짜가 현재 날짜로 변경되어 sed시간 정보가 없어졌습니다.

이것을 사용할 때 파일 날짜 업데이트를 방지하는 방법이 있습니까 sed?

답변1

안타깝게도 스위치 sed가 있는 모습은 이렇습니다.-i언제나임시 파일을 만듭니다(강조 광산):

-i[SUFFIX]
--in-place[=SUFFIX]

이 옵션은 파일이 그 자리에서 편집되도록 지정합니다. GNU `sed'는 다음과 같이 이를 수행합니다.임시 파일을 만들고 출력을 보냅니다.표준 출력 대신. (1).

이 옵션은 을 의미합니다 -s.

파일의 끝에 도달하면,임시 파일의 이름은 출력 파일의 원래 이름으로 변경됩니다.. 확장자(제공된 경우)는 임시 파일의 이름을 바꾸기 전에 이전 파일의 이름을 수정하여 백업 복사본을 만드는 데 사용됩니다(2)).

이는 sed파일 내용이 변경되지 않더라도 원본 파일이 다시 생성된다는 의미입니다.

해결책은 grep파일을 사용하기 전에 파일을 교체해야 하는지 알아내는 스크립트를 사용하는 것입니다 sed.

간단한 예:

for FILE in ~/mydir/**/*.txt 
do
    if grep -q PATTERN "$FILE"; then
         sed -i 's/oldpat/newpat/g' "$FILE"
    fi
done

-q해당 스위치는 grep일치하는 라인을 stdout.

관련 정보