3.4.4 位置に依存するオプション

GNU tarの一部のオプションは、同じ呼び出しの中で複数回使うことができ、それぞれ、その後に現れるすべての引数に影響します。ファイル名の選択方法や、使用するパターン照合の種類を制御するオプションが該当します。

最も分かりやすい例は-Cオプションです。これは、コマンドラインの残りの部分を処理する前に、引数で指定したディレクトリへ移動するようtarに指示します(作業ディレクトリの変更を参照)。したがって、次のコマンドでは、

tar -c -f a.tar -C /etc passwd -C /var log spool

ファイルpasswdをディレクトリ/etc内で探し、ファイルlogとspoolを/var内で探します。

これらのオプションは、--files-from(-T)オプションで指定するファイル一覧の中でも使えます(ファイルからの名前の読み込みを参照)。その場合、一覧の中でオプションより後に現れるすべてのファイル(パターン)に影響し、一覧の処理後に処理される引数に対しても効果が続きます。たとえば、ファイルlist.txtの内容が次のとおりで、

README
-C src
main.c

tarを次のように呼び出した場合、

tar -c -f a.tar -T list.txt Makefile

ファイルREADMEを現在の作業ディレクトリで探し、ファイルmain.cとMakefileをディレクトリsrc内で探します。

多くのオプションは、名前の先頭に--no-を付けることで、元のオプションの効果を取り消せます。

たとえば、--recursionオプションはサブディレクトリへ再帰的に入るかどうかを制御します。対応する--no-recursionは、この動作を無効にします。次のコマンドを考えてみてください。ディレクトリ/usrと、その中にあるすべてのファイルとディレクトリをアーカイブに格納します。また、/var内のファイルとディレクトリも格納しますが、そこから先へは再帰的に入りません6。

tar -cf a.tar --recursion /usr --no-recursion /var/*

アーカイブの作成中、GNU tarは、使われた位置依存オプションと、それらの影響を受ける引数を追跡します。そのようなオプションが明らかに誤った方法で使われていると分かると、その旨を報告し、終了コードを2に設定します。たとえば、次のとおりです。

$ tar -cf a.tar . --exclude '*.o'
tar: The following options were used after any non-optional
arguments in archive create or update mode.  These options are
positional and affect only arguments that follow them.  Please,
rearrange them properly.
tar: --exclude '*.o' has no effect
tar: Exiting with failure status due to previous errors

次の一覧は、位置に依存するすべてのオプションをまとめたものです。

--directory=dir
-C dir

作業ディレクトリの変更を参照してください。

--null
--no-null

NULで終端するファイル名を参照してください。

--unquote
--no-unquote

入力ファイル名の引用を参照してください。

--verbatim-files-from
--no-verbatim-files-from

verbatim-files-fromを参照してください。

--recursion
--no-recursion

ディレクトリへの再帰を参照してください。

--anchored
--no-anchored

先頭に固定したパターンを参照してください。

--ignore-case
--no-ignore-case

case-insensitive matchesを参照してください。

--wildcards
--no-wildcards

Controlling Pattern-Matchingを参照してください。

--wildcards-match-slash
--no-wildcards-match-slash

Controlling Pattern-Matchingを参照してください。

--exclude

Excluding Some Filesを参照してください。

--exclude-from
-X
--exclude-caches
--exclude-caches-under
--exclude-caches-all
--exclude-tag
--exclude-ignore
--exclude-ignore-recursive
--exclude-tag-under
--exclude-tag-all
--exclude-vcs
--exclude-vcs-ignores
--exclude-backups

Excluding Some Filesを参照してください。


(6)

--recursionオプションは既定値であり、ここでは分かりやすくするために記述しています。同じ例は、次のようにも書けます。

tar -cf a.tar /usr --no-recursion /var/*