マニュアルページには次のように記載されています
-C directory
In c and r mode, this changes the directory before adding the following files.
ただし、tarは指定したディレクトリに変更されず、代わりにレポートします
tar: <folder name>: Cannot stat: No such file or directory
ディレクトリ内のすべてのフォルダに対して、でtarコマンドを実行します。
私は本当に次のようなことをしなければなりませんか
cd <folder> && tar ... && cd -
または、この作業を行う方法はありますか?
この質問で推測するような-C
オプションは使用できないと思います。
セクション 6.10.1 Changing the Working Directory
GNU tar
のマニュアルでは、次のような-C
オプションについて説明しています。
コマンドラインまたは '--files-from'( '-T')を使用して指定されたファイルのいずれかで、ファイル名のリストの途中で作業ディレクトリを変更するには、 '-directory'( '-C ')。これにより、リスト内のその時点以降、作業ディレクトリが指定されたディレクトリに変更されます。
‘--directory=directory’
‘-C directory’
コマンドラインの途中で作業ディレクトリを変更します。
例えば、
$ tar -c -f jams.tar grape Prune -C food cherry
現在のディレクトリのファイル「grape」と「Prune」をアーカイブ「jams.tar」に配置し、続いてディレクトリ「food」のファイル「cherry」を配置します。このオプションは、同じアーカイブに保存する、大きく離れたファイルが複数ある場合に特に便利です。
ファイル「cherry」は、「food/cherry」ではなく「cherry」という正確な名前でアーカイブに記録されていることに注意してください。したがって、アーカイブには、すべて同じディレクトリからのものであるように見える3つのファイルが含まれます。アーカイブがプレーンな「tar--extract」で抽出された場合、3つのファイルすべてが現在のディレクトリに書き込まれます。
マニュアルページにはさらにいくつかの例があります...
更新:
私は通常、異なるパスからのファイルを1つのtarボールに混同しません。
しかし、それがあなたの望むものであるならば、できることが2つあります。
-T
オプションを使用します。-h
オプションを使用します-h
オプションは、そのディレクトリの下のファイルレイアウトを表す単一のtarボールを作成します。個人的には、サブシェルを使用してtarを「位置」にすることを好みます。 -C
オプションを学んだことがないので、どのように機能するのかわかりません。
私のCWDが/ path/aであり、先頭の/ path/bなしで/ path/b/fooのtarballを作成したいとします。 =:
user@Host:/path/a$ ( cd /path/b && tar czf ~/tarball.tgz foo )
user@Host:/path/a$
結果のtarballには、ディレクトリfoo /とそのすべての内容が含まれますが、先頭の/ path/bは含まれません。サブシェルはcdを実行し、cdが成功した場合はtarを実行し、同じCWDで元のシェルに戻ります。
hennoがコメントの1つで述べているように、tar-Cはワイルドカードでは機能しません。
* tarに渡される前に、現在のディレクトリに基づいてシェルによって展開されます
したがって、次のようなことをしようとしている場合:
tar -cvzf myfile.tgz -C somepath *
それは動作しません。私が知る限り、quack quixoteが示唆するように、最初にディレクトリを変更する必要があります。