gzipping up a set of directories and creating a tar compressed file

后端 未结 5 1494
孤独总比滥情好
孤独总比滥情好 2020-12-29 07:26

My bash fu is not what it should be.

I want to create a little batch script which will copy a list of directories into a new zip file.

There are (at least) t

相关标签:
5条回答
  • 2020-12-29 08:11

    You can export a variable like DIRECTORIES="DIR1 DIR2 DIR3 ...." And in the script you need to use the variable like tar czvf $DIRECTORIES

    0 讨论(0)
  • 2020-12-29 08:13

    You can create a gzipped tar on the commandline as follows:

    tar czvf mytar.tar.gz dir1 dir2 .. dirN
    

    If you wanted to do that in a bash script and pass the directories as arguments to the script, those arguments would end up in $@. So then you have:

    tar czvf mytar.tar.gz "$@"
    

    If that is in a script (lets say myscript.sh), you would call that as:

    ./myscript.sh dir1 dir2 .. dirN
    

    If you want to read from a list (your option 1) you could do that like so (this does not work if there is whitespace in directory names):

    tar czvf mytar.tar.gz $(<config.txt)
    
    0 讨论(0)
  • 2020-12-29 08:17

    In case, you are looking for compressing a directory, the following command can help.

    pbzip2 compresses directories using parallel implementation

    tar cf <outputfile_name> --use-compress-prog=pbzip2 <directory_name>
    
    0 讨论(0)
  • 2020-12-29 08:22

    Just use the null-byte as delimiter when you write file / directory names to file. This way you need not worry about spaces, newlines, etc. in file names!

    printf "%s\000" */ > listOfDirs.txt    # alternative: find ... -print0 
    
    while IFS="" read -r -d '' dir; do command ls -1abd "$dir"; done < listOfDirs.txt
    
    tar --null -czvf mytar.tar.gz --files-from listOfDirs.txt 
    
    0 讨论(0)
  • 2020-12-29 08:28

    create two files: filelist - place all required directories ( one on single line )

    and create a simple bash script:

        #!/bin/bash
    
    
    for DIR in `cat filelist` 
    do 
        if [ -d $DIR ] 
        then
            echo $DIR
        fi
    done
    
    0 讨论(0)
提交回复
热议问题