tar:无法将目录更改为<dir> / <file>:不是目录</file> </dir>

时间:2015-04-14 11:44:17

标签: linux unix tar

我需要对这个目录进行焦油 - totar

$ ls -l totar/
total 61388
 292 -rw-r--r--    1 wasext   was          298867 Apr 13 16:44 application.2015-01-19.0.log
 108 -rw-r--r--    1 wasext   was          109623 Apr 14 13:32 application.2015-01-20.0.log
 788 -rw-r--r--    1 wasext   was          805468 Apr 14 13:32 application.2015-01-21.0.log
1080 -rw-r--r--    1 wasext   was         1104861 Apr 14 13:32 application.2015-01-22.0.log
2052 -rw-r--r--    1 wasext   was         2098782 Apr 14 13:32 application.2015-01-23.0.log
   4 -rw-r--r--    1 wasext   was             455 Apr 14 13:32 application.2015-01-24.0.log
21076 -rw-r--r--    1 wasext   was        21581073 Apr 14 13:32 application.2015-01-26.0.log
9296 -rw-r--r--    1 wasext   was         9519026 Apr 14 13:32 application.2015-01-27.0.log
17912 -rw-r--r--    1 wasext   was        18341302 Apr 14 13:32 application.2015-01-28.0.log
8780 -rw-r--r--    1 wasext   was         8989019 Apr 14 13:32 application.2015-01-29.0.log

我使用参数&#34; -C&#34;:

创建了tarball文件
$ tar cvf t.tar -C totar/*
tar: can't change directories to totar/application.2015-01-19.0.log: Not a directory
a totar/application.2015-01-20.0.log 215 blocks
a totar/application.2015-01-21.0.log 1574 blocks
a totar/application.2015-01-22.0.log 2158 blocks
a totar/application.2015-01-23.0.log 4100 blocks
a totar/application.2015-01-24.0.log 1 blocks
a totar/application.2015-01-26.0.log 42151 blocks
a totar/application.2015-01-27.0.log 18592 blocks
a totar/application.2015-01-28.0.log 35823 blocks
a totar/application.2015-01-29.0.log 17557 blocks

我收到了这个错误: tar:无法将目录更改为totar / application.2015-01-19.0.log:不是目录

在创建的tar文件中缺少文件: totar / application.2015-01-19.0.log

$ tar tf t.tar
totar/application.2015-01-20.0.log
totar/application.2015-01-21.0.log
totar/application.2015-01-22.0.log
totar/application.2015-01-23.0.log
totar/application.2015-01-24.0.log
totar/application.2015-01-26.0.log
totar/application.2015-01-27.0.log
totar/application.2015-01-28.0.log
totar/application.2015-01-29.0.log

你能帮我解决错误吗?

2 个答案:

答案 0 :(得分:0)

我会看看我是否可以更清楚:当您输入*的任何内容时,您的shell会立即将其扩展为与该模式匹配的文件列表。

所以说你有一个更简单的目录:totar只包含3个文件:foobarfoobar

然后键入:

tar cvf t.tar -C totar/*

它扩展到

tar cvf t.tar -C totar/foo totar/bar totar/foobar

由于-C接受参数,tar会将下一个参数totar/foo解释为-C的参数。仅totar/bartotar/foobar作为要归档的文件。

你真的需要-C吗?因为我建议完全退出-C

$ tar cvf t.tar totar/*

<强>更新

如果您想保留-C的行为,我强烈建议您查看@ charles-duffy的评论。

干杯

答案 1 :(得分:0)

使用-C tar选项,在将文件添加到存档之前,您告诉tar先更改为该目录。这样可以非常方便地防止必须更改到该目录。假设您在$HOME目录中并想要归档/path/to/totar中的文件,那么您只需将-C选项添加到totar上方的目录和目标目录。如果您要归档/path/to/totar,则需要:

tar -C /path/to cvf somearchive.tar totar

注意 totar以上的文件规范是目录名而不是文件名,并且会包含totar目录中的所有文件。您包含通配符,但您可以包含特定的文件名。仅备份/path/to/totar中的某些文件:

tar -C /path/to/totar cvf somearchive.tar filename

filename目录中的totar。 (不允许使用通配符)