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


10

私のアーカイブのニーズの詳細のため、私は固体の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、そのときはアーカイブに入りません。これを修正するには?*すべてのファイルとフォルダーを返す必要はありませんか?


最後にbashパス拡張を使用しています。*削除してみてください。7zはディレクトリ全体をアーカイブする必要があります。
enzotib

@enzotibですが、アーカイブ内のディレクトリは必要ありません。その中にあるものだけが必要です。そして、それが私が質問にタグを付けた理由ですbash-多分私は「bashパス拡張」を間違った方法で使用していますか?
イヴァン

回答:


8

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

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

あなたが見たのは、で*始まらないファイルの名前のリストに展開されることです.。これが文書化された動作であり、名前がaで始まるファイル.が非表示と呼ばれる主な理由です(もう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 (またはオプションを設定した場合はzsh ksh_glob)では、.およびを除くすべてのファイルに一致するパターンを記述できます..

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)

9

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
    

はい、これをテストしただけで、を使用するよりもかなり整然としていshoptます。
意志

ここでベストアンサー。ありがとうございました。
Marcin

4

いいえ、*すべてのファイルを返すことは想定されていません。表示されているものだけを返します。

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

cd ~/my/folder
7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=off ~/my/folder.7z .
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.