使用删除文件和排除创建 tar 文件

使用删除文件和排除创建 tar 文件

我有以下目录结构和文件:

test:
total 16
drwxr-xr-x 2 db2root1 db2iadm1 4096 Jan 18 16:52 archive
-rw-r--r-- 1 db2root1 db2iadm1   34 Jan 18 16:38 file1.txt
-rw-r--r-- 1 db2root1 db2iadm1   34 Jan 18 16:38 file2.txt
drwxr-xr-x 2 db2root1 db2iadm1 4096 Jan 18 17:04 subdir

test/archive:
total 0

test/subdir:
total 4
-rw-r--r-- 1 db2root1 db2iadm1 34 Jan 18 16:38 file3.txt

现在我想使用以下命令在目录 archive 中创建一个 tar 文件,而不包含目录 archive 和文件 file1.txt:

tar --remove-files --exclude file1.txt --exclude archive -cvzf /test/archive/test.tar.gz /test

我将 --exclude 和 --remove-files 选项放在不同的位置,但总是收到以下错误消息:

tar: Removing leading `/' from member names
/test/
/test/subdir/
/test/subdir/file3.txt
/test/file2.txt
tar: /test: Cannot rmdir: Directory not empty
tar: Exiting with failure status due to previous errors

如何防止有关基目录 /test 的错误?

答案1

( cd /test; tar --remove-files --exclude file1.txt --exclude archive -cvzf archive/test.tar.gz * )

诀窍是cd进入目录然后tar *;子 shell 将阻止cd对上层 shell 产生任何影响。

答案2

您正在尝试使用--remove-files,这将“将文件添加到存档后将其删除”

您将 tarball 放置在 处/test/archive/test.tar.gz,并用柏油抹平/test/。该--remove-files选项告诉最后tar删除目录,但只要运行它就会访问该文件,所以你将无法删除该目录。/test/tar/test/archive/test.tar.gz

您可以放弃该--remove-files选项,或者将其放在tar不同的目录中。

相关内容