57903


このようなディレクトリ構造で、

[code]

    .
    ├── foo
    │   ├── bar
    │   └── baz
    └── foo.tar.gz
    
[/code]

圧縮ファイルの展開結果と同名のディレクトリ `foo` に気付かず展開コマンド `tar -xf foo.tar.gz` を実行してしまい、`foo`
以下に元々あったファイルと新しく展開されたファイルが混ざってしまいました。（実際はもう少したくさんのファイルと深いディレクトリ構造があります。）

混ざってしまうとマズいので展開してしまったファイルだけ削除したいのですが、どのようにすると手っ取り早いでしょうか？

なお、ファイルが上書きされてしまうと戻せない気がしますが、`foo.tar.gz`
を別の場所で展開して自分の記憶と照合する限り同名ファイルは無いように思うので、上書きは無いものと仮定して頂いて構いません。同名ディレクトリはありました。また、もし上書きの可能性まで検出できるような方法があればそれもあると嬉しいです。

### 環境

  * Ubuntu 18.04.3 LTS
  * Bash


CC BY-SA 4.0
2019-09-06T05:45:56.410
57897
2019-09-06T08:20:05.870
2019-09-06T07:21:36.207
19110
19110
question
linux tar
圧縮ファイルの展開をundoしたい


上書きは無いと仮定するなら、アーカイブに含まれるファイル一覧(`tar tf`)の出力結果を元に、  
そのファイルを削除する方法はどうでしょうか。

[code]

    $ tar tzf foo.tar.gz | grep -v '/$' | xargs rm
    
[/code]

リストの内、末尾が`/`で終わるものはディレクトリ名なはずなので、こちらは安全のため敢えて除外しています。中身が空な事を確認して不要であれば削除した方が良いかなと思いました。


CC BY-SA 4.0
2019-09-06T07:33:53.923
57903
2019-09-06T07:33:53.923
3060
57897
answer


tarの操作とそれ以前の操作に時間があいていれば、例えば直前の10分に変更されたファイルを削除することはできます。

[code]

    $ find foo -cmin -10 -type f | xargs rm
    
[/code]


CC BY-SA 4.0
2019-09-06T08:06:51.973
57906
2019-09-06T08:20:05.870
2019-09-06T08:20:05.870
241
241
57897
answer