Answers:
如果目录“ example”位于文件系统的根目录,则采用另一种方法:
tar -C /example/super_user -cvf result.tar .
这会将目录更改为您要执行tar的位置。需要注意的是,如果/ example / super_user下有任何子目录,则将为这些子目录保留目录结构。
/home/u/foo/bar
,工作目录为/home/b
,则tar -C foo/bar -cvf qiz.tar .
可以正常工作。需要注意的是,您不能使用通配符,即tar -C foo/bar -cvf qiz.tar *.log
,tar -C foo/bar -cvf qiz.tar "*.log"
否则tar -C foo/bar -cvf qiz.tar "foo/bar/*.log"
将无法使用。
-C
在单个tar
命令中使用多次。
我在这里发布了我的答案:
https://stackoverflow.com/questions/13924856/unix-tar-do-not-preserve-directory-structure
重新发布(适用于懒惰的ppl)
这很丑...但是行得通...
我有同样的问题,但是有多个文件夹,我只想整理每个文件。您可以使用选项“ transform”来传递sed表达式,并且...可以按预期工作。
这是表达式:
's/.*\///g'
(删除“ /”之前的所有内容)
这是最终命令:
tar --transform 's/.*\///g' -zcvf tarballName.tgz */*/*.info
要使用目录(DIR)中的所有文件创建一个tar(ARCHIVE.tar),而没有任何父目录信息(甚至没有./),可以使用以下方法:
find "DIR" -type f -printf "%f\n" | xargs tar cf ARCHIVE.tar -C "DIR"
您可以使用查找来限制深度,选择特定文件以及许多其他内容。
祝好运!
-printf
是非标准命令。其中许多仅适用于特定版本的find。通常,在回答有关超级用户的问题时,我们会将其标记出来(例如,“-blah是Gnu扩展名,将无法在所有地方使用”)。
如果这些是压缩包的全部内容,那么您可以使用GNU压缩包的--strip-components
选项删除文件前的2个级别。
pushd example/super_user
tar -cf output.tar Output.*
popd
pushd将当前目录路径推送到DIR
堆栈,然后移动到内容文件夹。然后,您使用返回到原始目录popd
。