12

いくつかのファイルを含むいくつかのディレクトリがあります

dir_archive/somedir1
dir_archive/somedir2
dir_archive/somedir3
dir_archive/mydir
dir_archive/mydir/excludedir1
dir_archive/mydir/excludedir2
dir_archive/mydir/excludedir3
dir_archive/mydir/many_other_directories...
dir_archive/mydir/my_archive_dir

すべてのファイルとディレクトリを除外して tar(gz) アーカイブ dir_archive.tar.gz を作成したい

dir_archive/mydir/excludedir1
dir_archive/mydir/excludedir2
dir_archive/mydir/excludedir3
dir_archive/mydir/many_other_directories...

しかし含む

dir_archive/mydir/my_archive_dir

--excludeディレクトリごとに使いたくない

tar cvfz dir_archive.tar.gz --exclude=dir_archive/mydir/excludedir1 --exclude=dir_archive/mydir/excludedir2 --exclude=dir_archive/mydir/excludedir3

を使用しようとし--add-fileましたが、うまくいきません:

tar cvfz dir_archive.tar.gz --exclude=dir_archive/mydir --add-file=dir_archive/mydir/my_archive_dir dir_archive

簡単な方法はありますか?ありがとう

4

2 に答える 2

21

1 つの方法は、最初に を除外しmydirてから追加することです。my_archive_dir

tar cvf dir_archive.tar --exclude=dir_archive/mydir dir_archive
tar rvf dir_archive.tar dir_archive/mydir/my_archive_dir
gzip dir_archive.tar

残念ながら、追加は圧縮されたアーカイブでは機能しません。

この--excludeオプションは引数としてパターンを取るため、除外するディレクトリの名前が似ている場合は、それらを避けてアーカイブ ディレクトリを含めることができます。

tar cvfz dir_archive.tar.gz --exclude=dir_archive/mydir/exclude* dir_archive

含めたいすべてのファイルの名前を含むファイルを作成し、そのリストを tar にオプション-Tまたはオプションで与えることもできます--files-from(または同様の方法で、除外するファイルをリストし、オプションでリストを与えます-X)。

ファイルリスト.txt:
dir_archive
dir_archive/temp1
dir_archive/mydir
dir_archive/mydir/temp2
dir_archive/mydir/my_archive_dir
dir_archive/mydir/my_archive_dir/temp7
tar cvfz dir_archive.tar.gz --no-recursion --files-from filelist.txt
于 2012-04-19T14:13:03.460 に答える
1

注文事項:

$ mkdir -p dir_archive/{somedir{1..3},mydir/{excludedir{1..3},otherone,my_archive_dir}}
$ touch dir_archive/{somedir{1..3},mydir/{excludedir{1..3},otherone,my_archive_dir}}/dir_file.txt
$ tar cvzf dir_archive.tar.gz dir_archive/mydir/my_archive_dir* --exclude "dir_archive/mydir/*" dir_archive
dir_archive/mydir/my_archive_dir/
dir_archive/mydir/my_archive_dir/dir_file.txt
dir_archive/
dir_archive/mydir/
dir_archive/somedir2/
dir_archive/somedir2/dir_file.txt
dir_archive/somedir1/
dir_archive/somedir1/dir_file.txt
dir_archive/somedir3/
dir_archive/somedir3/dir_file.txt

これが本質的に行っていることは、前もってより明確にしてから、親ディレクトリのみに除外を適用することです。

https://unix.stackexchange.com/a/417707/420501から恥知らずに盗まれた

于 2020-07-01T02:00:45.900 に答える