フォルダ構造を維持しながら、複数のファイル拡張子を見つけて圧縮します。

フォルダ構造を維持しながら、複数のファイル拡張子を見つけて圧縮します。

Ubuntu16.04

バックアップフォルダにフォルダ構造をzipファイルとして保持しながら、すべての.txt、.cfg、および.iniファイルをバックアップしたいと思います。

すべてのタスクを実行するより簡単な方法があることを知っていますが、これが私が持っている方法です。

#!/bin/bash

wdir="/home/files"
backup_dir="/home/files/backup"
allcfg=$(find suan -name '*.cfg')
alltxt=$(find suan -name '*.txt')
allini=$(find suan -name '*.ini')
timeStamp="$(date +%Y--%b-%d--%k:%M--%P)"
backupfilename="${backup_dir}/Backup-${timeStamp}.zip"

#-- set some arrays ...
backupfiles=( "$allcfg" "$alltxt" "$allini" )

cd "$wdir"
zip -r "$backupfilename" "$backupfiles"

したがって、アーカイブされたファイルの良い出力を見ることができますが、圧縮部分に達するとエラーが発生します。

zip error: Nothing to do! (try: zip -r /home/files/backup/Backup-2018--Jul-04--21:37--pm.zip . -i suan/cfg/360controller.cfg

しかし、それも動作しません。

答え1

-rこれが再帰オプションがどのように機能するかです7z。これは再帰パターン検索です。

7z a -r "$backupfilename" \*.ini \*.cfg \*.txt

7zzipファイルを作成してください。

find7zipがない場合は、複数の引数オプションも使用できます。

find suan \( -name \*.cfg -o -name \*.txt -o -name \*.ini \) \
    -exec zip -r "$backupfilename" {} +

答え2

使用findzip:

find "$wdir" -type f '(' -name '*.cfg' -o -name '*.txt' -o -name '*.ini' ')' \
    -exec zip -r "$backupfilename" {} +

または、cdスクリプトを最初に配置して"$wdir"から、アーカイブに保存したいパスに応じてコマンド.で使用することもできます。find

これにより、関連するすべてのファイルが検索され、バックアップファイルに保存されます。

またはbash何千ものファイルがない場合:

set -s globstar nullglob dotglob
cd "$wdir" && zip -r "$backupfilename" **/*.ini **/*.cfg **/*.txt

ここで設定されているシェルオプションは**glob(globパス名)を有効にして、拡張されていないglobを空の文字列に展開し、globを隠しファイルと一致させます。

関連情報