web-dev-qa-db-ja.com

7zを使用して、ディレクトリ内のすべてのファイルとディレクトリ(非表示のものを含む)をアーカイブする方法

私のアーカイブのニーズの詳細のため、固体のtar.gzアーカイブには満足できず、代わりに7zを使用します。

これを行うには、次のコマンドを使用します。

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/*

~/my/folder/内のすべてのアーカイブを~/my/folder.7zファイルとして作成します。

しかし、~/my/folder/.hiddenFolderはそのときアーカイブに入りません。これを修正するには? *はすべてのファイルとフォルダを返すことになっていますか?

10
Ivan

単一のディレクトリの内容が必要な場合、簡単な方法は最初にそれに変更することです:

cd ~/my/folder
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z .

あなたが見たのは、*.で始まらないファイルの名前のリストに展開されることです。これが文書化された動作であり、.で始まる名前のファイルが非表示になっていると言われる主な理由です(もう1つは、lsがデフォルトで表示しないことです)。

ディレクトリ内のすべてのファイルを一覧表示する便利なポータブルな方法はありません。使用できます

~/my/folder/..?* ~/my/folder/.[!.]* ~/my/folder/*

ただし、いずれかのパターンに一致するファイルがない場合、パターンは展開されないままになります。 bashでは、dotglobオプションを設定して、先頭の.を特別に処理しないようにすることができます(...はまだ一致から除外されています)。

shopt -s dotglob
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/*

Ksh、またはextglobオプションを設定した場合はbash(またはksh_globオプションを設定した場合はzsh)では、...を除くすべてのファイルに一致するパターンを記述できます。

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/@(..?*|.[!.]*|*)

Zshでは、.をパターンで特別に処理してはならないという簡単な方法があります。

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/*(D)

TL; DR

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z ~/my/folder/.

その他の例

ディレクトリ構造の例

test1
├── .hidden
└── normal.txt

0 directories, 2 files

次のコマンドを試してください

  1. すべてのコンテンツを含むルートフォルダー。

    7za a test1_a.7z ~/test1/
    

    与える

        Date      Time    Attr         Size   Compressed  Name
    ------------------- ----- ------------ ------------  ------------------------
    2017-08-06 09:23:51 D....            0            0  test1
    2017-08-06 09:23:44 ....A            0            0  test1/.hidden
    2017-08-06 09:23:51 ....A            0            0  test1/normal.txt
    ------------------- ----- ------------ ------------  ------------------------
    2017-08-06 09:23:51                  0            0  2 files, 1 folders
    
  2. ルートフォルダも隠しファイルもありません

    7za a test1_b.7z ~/test1/*
    

    与える

       Date      Time    Attr         Size   Compressed  Name
    ------------------- ----- ------------ ------------  ------------------------
    2017-08-06 09:23:51 ....A            0            0  normal.txt
    ------------------- ----- ------------ ------------  ------------------------
    2017-08-06 09:23:51                  0            0  1 files
    
  3. ルートフォルダーはありませんが、隠しファイルが含まれています(これは通常必要です)

    7za a test1_c.7z ~/test1/.
    

    与える

       Date      Time    Attr         Size   Compressed  Name
    ------------------- ----- ------------ ------------  ------------------------
    2017-08-06 09:23:44 ....A            0            0  .hidden
    2017-08-06 09:23:51 ....A            0            0  normal.txt
    ------------------- ----- ------------ ------------  ------------------------
    2017-08-06 09:23:51                  0            0  2 files
    
9
stil

番号、 *はすべてのファイルを返すとは限りません。表示されているものだけを返します。

より簡単な解決策は次のとおりです。

cd ~/my/folder
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z .
4
andcoz