同じ名前のファイルを上書きせずに複数のファイルを解凍します。

同じ名前のファイルを上書きせずに複数のファイルを解凍します。

私のスクリプトの初期段階では、ユーザーが提供した「x」個のファイルを解凍する必要がありました。圧縮ファイルセットには名前が重複しています(ただし内容は異なります)。つまり、zip1.zip と zip2.zip の両方に「d09483272」という名前のファイルが含まれています。

これにより複数のファイルを解凍できますが、unzip \*zip -d $M_DIR私の場合、新しく解凍したファイルはすでに$ M_DIRの場所にあるファイルを上書きするため、非効率的です。

タイムスタンプで解凍してみてください。以下のような奇妙なネストループ(明らかに動作しません)

    for zip in *zip; do
            unzip -l *zip | while read file
            do
                    unzip -p *.zip ${file} > $(date "+%H:%M:%S:%s%N").pdf
            done
    done

これが適切なアプローチではない場合は、より簡単な方法がありますか?アイデア?

答え1

unzip-manpageを見てください。

 -n     never overwrite existing files.  If a file already exists, skip the extraction
        of that file without prompting.

答え2

時間が限られていたので、エレガントではないクイック修正に突入しました。

    for zip in $T_DIR*zip; do
            unzip $zip -d $M_DIR;
            rename "s/.pdf/$(date "+%s%N").pdf/" ${M_DIR}*;
    done

各ファイルは個別に$T_DIRフォルダーに抽出され、ファイル名にナノ秒タイムスタンプが追加されます。解凍されたファイルの次の波がそのフォルダに入ると、$T_DIR「重複する名前」はもうありません。より高速で改善されたソリューションのアイデアはありますか?

これは、「冗長名」ファイルが別々のzipファイルに存在する警告にのみ適用されます。

関連情報