フォルダ自体の代わりにフォルダ内のファイルをアーカイブに追加するにはどうすればよいですか?

フォルダ自体の代わりにフォルダ内のファイルをアーカイブに追加するにはどうすればよいですか?

これは重複ではありません親ディレクトリなしでtarアーカイブを作成する

これにより、tar -czf archive directoryそのディレクトリがアーカイブに追加されます。directoryディレクトリ自体の代わりにフォルダのファイルを追加したいと思います。どうすればいいですか?関連しない答えを
提案してください。cddirectory

これは表示内容と重複しません。内容を含む
ディレクトリがあります。somedirabcxyz

ls somedir
abc xyz

フォルダ以外のファイルを含むアーカイブを作成したいと思いますabcxyzsomedir

修正する:コマンドを使用するとtar -C /home/username/dir1/dir2 -cvf temp.tar yourarchive(私の質問に対する答えは重複と呼ばれます)、
次のような結果が得られます。

ここに画像の説明を入力してください。

私が望むのは、tar czf archive.tar.gz -C yourarchive .私がこれを得ることです(これは私が望むものに十分近いです。):

ここに画像の説明を入力してください。

私が望むものは次のとおりです(直接ファイル、フォルダなし)。

ここに画像の説明を入力してください。

答え1

使用-C:

tar czf archive -C directory .

これは作業ディレクトリとしてtar使用し、ディレクトリ()に含まれるすべてをアーカイブするように指示します。directory.

使用は-C使用とほぼ同じですcd。上記は、archive起動時に現在のディレクトリに基づいて解釈され、次に解釈される前に作業ディレクトリをに変更します。tartardirectory.

tar -Cどれだけ広くサポートされているかはわかりませんが、すべてのLinuxディストリビューションがそれをサポートする必要があります。

答え2

努力する

tar cvf archive.tar -C somedir $(ls somedir)

どこ

  • cvf〜する言い換えるVエルボス(ly)FエリーArchive.tar
  • -C somedirtarに使用するように指示します。somedir
  • $(ls somedir )ディレクトリ内のファイルを一覧表示し、$( )結果を引数として渡します。

編集する:

コメントで指摘したように、ドットファイルを一覧表示するには(ls -aのls -A代わりに)を使用します。

答え3

あなたはこれを行うことができます人数(1)、これはtarのposix以降のバージョンでしたが、決して人気を集めませんでした。 tarファイルに書き込むことができ、必要なファイル名変換を実行できます。

pax -wzf archive -s '|directory/\?||' directory

これは次のように分類できます。

  • -wアーカイブの書き込み(-ctarと同じ)
  • -z圧縮アーカイブ(tarと同じ)
  • -f archiveファイルへの書き込みarchive(tarと同じ)
  • -s '|directory/\?||'アーカイブのファイル名を変更します。文字列をオプションのdirectory/の文字列に置き換えます。/ディレクトリ自体はaで終わりませんが、/他のすべてのメンバーは終了するため、オプションが必要です/。この文字列^は最初の項目(たとえばsed(1))のみを置き換え、すべてのファイルは次に終わるため、文字列()の先頭に固定する必要はありません。directory/\?

明確にするために、以下を追加できます。

  • -x ustarPOSIX tarファイルの作成

しかし、これがデフォルト設定です。

LinuxまたはBSDパッケージリポジトリでpaxを見つけることができるはずです。 GNU paxがあるようですが、その状態がわかりません。 Debian には pax の BSD バージョンがあるようです。

関連情報