複数の7zアーカイブを1つにマージする方法は?

複数の7zアーカイブを1つにマージする方法は?

私は複数の7zアーカイブをインポートして単一のアーカイブにまとめるbashスクリプトを作成しようとしています。これが私が今まで持っているものです。

#!/bin/bash
DUMPPATH="/home/backups/dumps/"
NEWPATH=$DUMPPATH"combined/"
FILETYPE="*.7z"
DATE="$(date +%Y-%m-%d-%H-%M-%S)"
NEWNAME=$NEWPATH"AllAsOf"$DATE".7z"
for FILE in $(ls $DUMPPATH$FILETYPE)
do
        echo -n $FILE"..."
        7z e $FILE -so | 7z a -si -mx=9 $NEWNAME
        if [ $? -eq 0 ]; then
                echo "Done."
        else
                echo "Something broke"
                exit
        fi
done

スクリプトを実行すると表示されるので、Error: Duplicate filenameスクリプトの中核部分だけを実行しようとしています 7z e /home/backups/dumps/foo.7z -so | 7z a -si -mx=9 /home/backups/dumps/combined/combined.7z。内部を見てみましょう。combined.7zというファイルが含まれていますcombined。私のスクリプトが機能しないのは、追加されたすべてのファイルがcombined.7z同じファイル名で追加されるためです。

7zを指定して、各ファイルの起動時にファイル名を追加する必要があると思いますstdin。これを行う方法はありますか?

ベストアンサー1

私はそれから学んだこの問題-si7zでは、フラグの後にファイル名を追加できます。また、ファイル名を取得するために1行を追加しました。私のスクリプトは次のとおりです。

#!/bin/bash
DUMPPATH="/home/backups/dumps/"
NEWPATH=$DUMPPATH"combined/"
FILETYPE="*.7z"
DATE="$(date +%Y-%m-%d-%H-%M-%S)"
NEWNAME=$NEWPATH"AllAsOf"$DATE".7z"
for FILE in $(ls $DUMPPATH$FILETYPE)
do
        echo -n $FILE"..."
        THISNAME=$(echo $FILE | sed "s|.*"$DUMPPATH"||" | sed "s/\.7z.*//")
        7z e $FILE -so | 7z a -si$THISNAME -mx=9 $NEWNAME
        if [ $? -eq 0 ]; then
                echo "Done."
        else
                echo "Something broke"
                exit
        fi
done

正規表現を実行するより良い方法があることを知っていますが、これは効果的です。

おすすめ記事