이름은 같지만 확장자가 다른 파일을 찾아 tgz로 보냅니다.

이름은 같지만 확장자가 다른 파일을 찾아 tgz로 보냅니다.

나는 카메라에서 편집된 이미지의 대규모 아카이브를 가지고 있는데, 각 이미지는 실제로 *.nef 및 *.xmp 파일 쌍입니다. 모든 폴더를 탐색한 다음 쌍을 단일 tgz 파일로 압축하고 싶습니다.

디렉토리의 각 파일 이름은 고유하므로 ls *.nef명령 출력에서 ​​파일 이름을 이동하는 것만으로도 충분 tar -czf {filename}.tgz {filename}.*하지만 어디서부터 시작해야 할지 모르겠습니다.

미리 감사드립니다.

답변1

짧은 스크립트 xfun:

#!/bin/bash
b=$(basename "$1" .xmp)
# echo "tar -cjf $b.tar.bz2 $b.xmp $b.nef"
tar -cjf "$b.tar.bz2" -- "$b.xmp" "$b.nef"

옮기다:

find -name "*xmp" -execdir ./xfun {} ";" 

답변2

zsh 또는 bash ≥4에서:

for x in **/*.nef; do
  x=${x%.nef}
  if [ -e "$x.xmp" ]; then
    tar -czf "$x.tgz" -- "$x.nef" "$x.xmp" && rm -- "$x.nef" "$x.xmp"
  fi
done

&& rm …아카이브 파일을 삭제하지 않으려면 이 섹션을 삭제하세요.

**/하위 디렉터리가 아닌 현재 디렉터리에서만 작동하도록 첫 번째 줄의 일부를 제거합니다 . 그러면 코드 조각이 모든 셸에서 작동합니다.

일부 이전 구현에서는 gzip 아카이브 생성을 tar지원하지 않을 수 있습니다. 또 다른 가능성은 파일을 삭제하지 않는 경우입니다 (이 형식은 명령이 실패하더라도 소스 파일을 삭제하므로 함께 사용할 수 없습니다 ).-ztar -cf "$x.tar" -- "$x.nef" "$x.xmp" && gzip -o "$x.tgz" -- "$x.tar" && rm …tar -cf - -- "$x.nef" "$x.xmp" | gzip >"$x.tgz"&& rmtar

관련 정보