파일이 이미 존재하는 경우에만 대상 폴더에 복사합니다. 하지만 소스 파일의 파일 확장자는 다릅니다.

파일이 이미 존재하는 경우에만 대상 폴더에 복사합니다. 하지만 소스 파일의 파일 확장자는 다릅니다.

파일이 이미 존재하는 경우에만 대상 폴더에 복사합니다. 그러나 소스 파일의 파일 확장자는 다릅니다.

즉, 일부 파일의 백업이 있습니다.".desktop.in"확장자, 파일 확장자가 있는 위치에 복사하고 싶어요". 데스크탑"이며 대상에 이미 존재하는 파일만 포함합니다.

소스 폴더에는 다음이 포함됩니다.

  • a.Desktop.in
  • b.desktop.in
  • c.Desktop.in

대상 폴더에는 다음이 포함됩니다.

  • a.데스크탑
  • b.데스크톱

그냥 덮고싶다a.데스크탑그리고b.데스크톱문서

이것을 시도했습니다 :

for file in /destination/*.desktop;do cp /src/"${file##*/}".in "$file";done

하지만 해당 작업에 최적화된 것 같지는 않습니다.

더 좋은 방법을 알고 있나요?

답변1

for file in /destination/*.desktop; do echo cp "/src/${file##*/}.in" "$file"; done

문제가 없으면 삭제하세요 echo.

답변2

당신이 가지고 있는 것은 기본적으로 얻는 것만큼 좋습니다.

열거된 파일의 디렉터리로 변경하여 몇 가지 파일 이름 작업을 저장할 수 있습니다. 이는 성능 문제가 아니라 가독성 문제입니다.

set -e
cd /destination
for file in *.desktop; do
  cp "/src/$file.in" "$file"
done

오작동 여부를 확인하는 것을 잊지 마십시오.

답변3

두 가지 방법을 찾았습니다.

for file in /src/*.desktop.in; do
  file=${file%.in}
  if test -e "/dest/$(basename ${file})"
    then cp "/src/${file}.in" "/dest/${file}"
  fi
done

rsync 및 --기존:

for file in /src/*.desktop.in; do 
  rsync --dry-run --existing --verbose "/src/${file}" "/dest/${file%.in}"
done

관련 정보