簡體   English   中英

如何僅將路徑中的最后一個目錄打包到 tar 文件中?

[英]How I can pack into tar-file only last directory from path?

如何僅將路徑中的最后一個目錄打包到 tar 文件中? 例如,我有幾條路徑

/usr/local/files/dir1/

   file1.txt
   file2.txt
   file3.txt

/usr/local/files/dir2/

   file3.txt
   file4.txt
   file5.txt

如果我運行命令:

tar czf my_arch.tar.gz -C /usr/local/files/dir1 .

我只獲得dir1目錄的包含,沒有它本身。

所以我有 - my_arch.tar.gz/file1.txt、file2.txt、file3.txt,但我需要在我的檔案中這樣的結構 -

my_arch.tar.gz/dir1/file1.txt, file2.txt, file3.txt

我怎么能做到這一點?

謝謝你。

嘗試

cd /usr/local/files
tar -cvzf my_arch.tar.gz dir1

-C 指令將使您更改為 dir1,因此不會存檔文件夾,而是存檔其內容:

 -C, --directory DIR change to directory DIR

您不能直接通過 tar 執行此操作。 這是我的建議:

#!/bin/bash
mydir=/my_dir/whit/long_and/complicated_path/the_stuff_is_here
dirname=$(dirname $mydir )
basename=$(basename $mydir )

 tar cvf /tmp/$basename.tar    -C $dirname $basename  

如果我理解您的要求是正確的,您希望您的 tar 文件包含該目錄。

在沒有 -C 標志的情況下嘗試,如下所示:

tar -czf my_arch.tar.gz /usr/local/files/dir1
$ tar vczf tmp/export/files.tar.gz -C tmp/export src

files.tar.gz 的結構

src
src/app
src/app/main.js
src/app/util
src/app/util/runtime.js

如果你指定-C那么你的目錄路徑是./ 可能會像您想要的那樣工作:

$ touch asdf/foo/bar/{1,2,3}
$ tree asdf/
asdf/
└── foo
    └── bar
        ├── 1
        ├── 2
        └── 3

2 directories, 3 files
$ tar -cv -C asdf/foo/bar/ -f asdf.tar ./
./
./3
./2
./1
$ tar tf asdf.tar
./
./3
./2
./1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM