how to rename files you put into a tar archive using linux 'tar'

前端 未结 4 1118
梦谈多话
梦谈多话 2021-01-03 21:32

I\'m trying to create a tar archive with a couple files, but rename those files in the archive. Right now I have something like this:

tar -czvf file1 /some/p         


        
相关标签:
4条回答
  • 2021-01-03 21:36

    After not liking any solution that I've found, I've just written tarlogs.py, which lets you specify arbitrary names for tar entries. Each tar entry is constructed from one (or several) regular (or gzipped) inputs. You can also add directories, which will be recursed into as with regular tar. So in your case,

    tarlogs.py -o file1 -i /some/path/to/file2 -o file2 -i file3 -o path/to/renamedFile3 -o /etc >output.tar
    

    (-o with no -i inputs simply uses the output path as input, with no renaming)

    0 讨论(0)
  • 2021-01-03 21:38

    We can refer to the man tar, the -O option is the best choice since files can be written to standard out.

    -O      (x, t modes only) In extract (-x) mode, files will be written to
             standard out rather than being extracted to disk.  In list (-t)
             mode, the file listing will be written to stderr rather than the
             usual stdout.
    

    here are the examples:

    # 1. without -O
    tar xzf 20170511162930.db.tar.gz
    # result: 20170511162930.db
    
    # 2. with -O
    tar xzf 20170511162930.db.tar.gz -O > latest.db
    # result: latest.db
    
    0 讨论(0)
  • 2021-01-03 21:41

    With --transform, there's no need to make a temporary testDir first. To prepend testDir/ to everything in the archive, match the beginning anchor ^:

    tar --transform "s|file3|path/to/renamedFile3|" \
        --transform "flags=r;s|^|testDir/|" \
        -czvf my_archive.tgz file1 /some/path/to/file2 file3 etc
    

    The r flag is critical to keep the transform from breaking any symlink targets in the archive (which also match ^).

    0 讨论(0)
  • 2021-01-03 21:57

    You can modify filenames (among other things) with --transform. For example, to create a tape archive /tmp/foo.tar, putting files /etc/profile and /etc/bash.bashrc into it while also renaming profile to foo, you can do the following:

    tar --transform='flags=r;s|bar|foo|' -cf file.tar file1 file2 bar fubar /dir/*
    

    Results of the above is that bar is added to file.tar as foo.

    The r flag means transformations are applied to regular files only. For more information see GNU tar documentation.

    You can use --transform multiple times, for example:

    tar --transform='flags=r;s|foo|bar|' --transform='flags=r;s|baz|woz|' -cf file.tar /some/dir/where/foo/is /some/dir/where/baz/is /other/stuff/* /dir/too
    
    0 讨论(0)
提交回复
热议问题