tar アーカイブのコンテンツを親ディレクトリに抽出中に問題が発生した場合、子ディレクトリが作成されます。

tar アーカイブのコンテンツを親ディレクトリに抽出中に問題が発生した場合、子ディレクトリが作成されます。

Tarファイルがあります。testwebsite.tar

コンテンツを抽出するWebサーバーのディレクトリ、つまりmytestdirectoryに配置しました。

PuTTYを介してこのコマンドを実行します。tar -xvf testwebsite.tar

その結果、コンテンツが抽出されますが、フォーマットは次のようになります。

mytestdirectory/srv/test/www.testwebsite.com/

mytestdirectory存在するすべてのファイルがサブディレクトリに含まれることを望みますwww.testwebsite.com

コマンドを使用してこのサブディレクトリのすべてのエントリを親ディレクトリに移動する方法はありますかmv

私はいくつかの回答を試してみましたが、その1つはサブディレクトリからこのコマンドを実行することでした。

mv * .[^.]* ..

ただし、これにより次のメッセージが表示されます。

mv: cannot stat `*': No such file or directory
mv: cannot stat `.[^.]*': No such file or directory

誰でもこの問題を解決するのに役立ちますか?私は基本的にすべてのエントリ(隠しファイルを含む)をwww.testwebsite.comサブディレクトリからmytestdirectory親ディレクトリに移動しようとしています。

ベストアンサー1

tarオプションを使用する必要があります--strip-components。これは、tarアーカイブに不要なパスが含まれているためです。

たとえば、tarには次のものが含まれており、srv/test/www.testwebsite.com/index.htmlこれを取得するにはmytestdirectory/index.html次のものが必要です。

$ cd /path/to/mytestdirectory
$ tar xf testwebsite.tar --strip-components=3 

verboseコマンドを使用していても、元のファイル名を完全に設定するため、パラメータを追加して変更されたパスを一覧--show-transformed表示することもできます。

$ tar tfz workspace.tar.gz --strip-components=2 workspace/project
-rw-rw-r-- guido/guido   11134 2009-01-22 23:21 workspace/project/aaa
-rw-rw-r-- guido/guido   11134 2009-01-22 23:21 workspace/project/bbb
[... list continues ...]
$ tar tfz workspace.tar.gz --strip-components=2 --show-transformed workspace/project
-rw-rw-r-- guido/guido   11134 2009-01-22 23:21 aaa
-rw-rw-r-- guido/guido   11134 2009-01-22 23:21 bbb
[ ... and so on ...]

状況を解決するには、mv次のようにします。

# cd /path/to/mytestdirectory 
# mv srv/test/www.testwebsite.com/* .

隠しファイルを処理するための1つの解決策は次のとおりです。

# shopt -s dotglob

上記のコマンドの前に実行し、globのドットファイルを一致させるか、より良い方法で現在のターゲットディレクトリを削除してから、コピーするディレクトリを移動して名前を変更します。

[ delete or rename current /path/to/mytestdirectory ]
# cd /path/to
# mv srv/test/www.testwebsite.com/ mytestdirectory/
# rmdir srv/test/ srv/

おすすめ記事