名前は同じですが、拡張子が異なるファイルを見つけて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

関連情報