我有一个 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-components
tar 选项;这是因为 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/