나는 카메라에서 편집된 이미지의 대규모 아카이브를 가지고 있는데, 각 이미지는 실제로 *.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
지원하지 않을 수 있습니다. 또 다른 가능성은 파일을 삭제하지 않는 경우입니다 (이 형식은 명령이 실패하더라도 소스 파일을 삭제하므로 함께 사용할 수 없습니다 ).-z
tar -cf "$x.tar" -- "$x.nef" "$x.xmp" && gzip -o "$x.tgz" -- "$x.tar" && rm …
tar -cf - -- "$x.nef" "$x.xmp" | gzip >"$x.tgz"
&& rm
tar