How do I exclude absolute paths for tar?

前端 未结 4 1344
耶瑟儿~
耶瑟儿~ 2021-02-03 19:27

I am running a PHP script that gets me the absolute paths of files I want to tar up. This is the syntax I have:

tar -cf tarname.tar -C /www/path/path/file1.txt /         


        
相关标签:
4条回答
  • 2021-02-03 19:39

    If you don't know how many components are in the path, you could try this:

    DIR_TO_PACK=/www/path/
    cd $DIR_TO_PACK/..
    tar -cf tarname.tar $(basename $DIR_TO_PACK)
    
    0 讨论(0)
  • 2021-02-03 19:41

    If you want to remove the first n leading components of the file name, you need strip-components. So in your case, on extraction, do

    tar xvf tarname.tar --strip-components=2
    

    The man page has a list of tar's many options, including this one. Some earlier versions of tar use --strip-path for this operation instead.

    0 讨论(0)
  • 2021-02-03 19:42

    For me the following works the best:

    tar xvf some.tar --transform 's?.*/??g'
    

    --transform argument is a replacement regex for sed, to which every extracted filepath is fed. Unlike --strip-components, it will remove all path information, not just fixed number of components.

    0 讨论(0)
  • 2021-02-03 20:00

    You are incorrectly using the -C switch, which is used for changing directories. So what you need to do is:

    tar -cf tarname.tar -C /www/path path/file1.txt path2/path3/file2.xls
    

    or if you want to package everything under /www/path do:

    tar -cf tarname.tar -C /www/path .
    

    You can use -C switch multiple times.

    0 讨论(0)
提交回复
热议问题