将 tar 存档的内容提取到父目录问题导致创建子目录

将 tar 存档的内容提取到父目录问题导致创建子目录

我有一个 Tar 文件:testwebsite.tar

我已将其放在 Web 服务器上我想要将其内容提取到的目录中,即 mytestdirectory

我通过 PuTTY 运行此命令:tar -xvf testwebsite.tar

这会导致内容被提取,但格式如下:

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

我希望出现的所有文件mytestdirectory都包含在www.testwebsite.com子目录中。

有没有办法使用命令将此子目录中的所有内容移动到父目录mv

我四处寻找并尝试了几个答案,其中一个是从子目录中运行这个命令:

mv * .[^.]* ..

但这导致显示此消息:

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

有人可以帮助我解决这个问题吗?我基本上试图将所有内容(包括隐藏文件)从子目录 www.testwebsite.com 移动到父目录 mytestdirectory。

答案1

您需要使用--strip-componentstar 选项;这是因为 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/* .

为了处理隐藏文件,一种解决方案是:

# shopt -s dotglob

在上述命令之前执行,对glob也匹配dotfiles;或者更好的是,删除当前的目标目录,然后移动并重命名要复制的目录:

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

相关内容