查找同名但不同扩展名的文件,发送到tgz

查找同名但不同扩展名的文件,发送到tgz

我有一个来自相机的大量已编辑图像的存档,每个图像实际上是一对文件 - *.nef 和 *.xmp。我想浏览所有文件夹,然后将这些对压缩到单个 tgz 文件中。

目录中的每个文件名都是唯一的,因此将文件名从 的 输出移动ls *.nef到 command就足够了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 …如果您不想删除存档文件,请删除该部分。

删除**/第一行的部分,使其仅在当前目录中起作用,而不能在其子目录中起作用(然后该代码片段将在任何 shell 中工作)。

一些旧的tar实现可能不支持-z创建 gzip 存档;那么你就可以使用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命令失败它也会删除源文件)。

相关内容