创建 tar 并将其保存到标准输出

ten*_*avi 5 shell sh

我正在尝试从包含其他文件列表的文件创建 tar 并将其保存到标准输出。

假设有一个名为“ files-to-create ”的文件,其中包含其他文件的路径,例如/home/abc.txt /home/def.txt,我想创建abc.txt,def.txt的 tar 。

我的脚本包含:

exec 100>&1
tar cf - -T files-to-sync >&100
Run Code Online (Sandbox Code Playgroud)

我正在调用脚本并将其保存到其他文件中,例如:

/script.sh > final_tar.tar

但是在创建 tar 时我遇到错误,有人可以帮助我吗?

All*_*lan 1

您可以使用以下脚本来实现您的目标,如果有不清楚的地方请告诉我:

\n\n

原型1:

\n\n
$ cat scriptTar.sh \n#!/bin/bash\n\nreadonly HELP="$(basename "$0") <list_of_files> <output_tar>\n\nthis script will generate a tar file composed of all files present in <list_of_files> input file\nthe output tar file will be saved as <output_tar>\nto run the script provide the input and output filenames"\n\nreadonly INPUT_LIST_FILE=$1\nreadonly OUTPUT_TAR_FILE=$2\nif [ -z "$INPUT_LIST_FILE" -o -z "$OUTPUT_TAR_FILE" ]\nthen\n echo $HELP; \n exit 1;\nfi\n\ntar cf - -T $INPUT_LIST_FILE > $OUTPUT_TAR_FILE \nexit $?\n
Run Code Online (Sandbox Code Playgroud)\n\n

文件夹内容:

\n\n
$ tree .\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 a\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 abc.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 b\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 def.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 c\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 ghj.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 files-to-sync.in\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 scriptTar.sh\n\n3 directories, 5 files\n
Run Code Online (Sandbox Code Playgroud)\n\n

列出文件内容:

\n\n
$ cat files-to-sync.in \n./a/abc.txt\n./b/def.txt\n./c/ghj.txt\n
Run Code Online (Sandbox Code Playgroud)\n\n

执行:

\n\n
$ ./scriptTar.sh files-to-sync.in output.tar\n
Run Code Online (Sandbox Code Playgroud)\n\n

tar 文件内容:

\n\n
$ tar -tvf output.tar                                                                                                                          \n-rw-rw-r-- arobert/arobert   4 2018-02-22 16:50 ./a/abc.txt\n-rw-rw-r-- arobert/arobert   4 2018-02-22 16:50 ./b/def.txt\n-rw-rw-r-- arobert/arobert   4 2018-02-22 16:50 ./c/ghj.txt\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者,如果您确实想在标准输出上显示它,请使用以下脚本:

\n\n

通过 ssh 的原型 2:

\n\n
#!/bin/bash\n\nreadonly HELP="ERROR: $(basename "$0") <list_of_files> \n\nthis script will generate to stdout a tar file composed of all files present in <list_of_files> input file\nto run the script provide the input file and redirect the output to a file"\n\nreadonly INPUT_LIST_FILE=$1\nif [ -z "$INPUT_LIST_FILE" ]\nthen\n echo $HELP; \n exit 1;\nfi\n\ntar cf - -T $INPUT_LIST_FILE \n
Run Code Online (Sandbox Code Playgroud)\n\n

通过 ssh 执行: \n $ ssh user@localhost "cd /home/user/test_tar/; ./scriptTar.sh files-to-sync.in" > output.tar\n user@localhost\'s 密码:

\n\n

生成的tar内容:

\n\n
tar -tf output.tar\n./a/abc.txt\n./b/def.txt\n./c/ghj.txt\n
Run Code Online (Sandbox Code Playgroud)\n\n

提取内容:

\n\n
tar xvf output.tar \n./a/abc.txt\n./b/def.txt\n./c/ghj.txt\n
Run Code Online (Sandbox Code Playgroud)\n\n

检查文件:

\n\n
more ?/*.txt\n::::::::::::::\na/abc.txt\n::::::::::::::\nabc\n::::::::::::::\nb/def.txt\n::::::::::::::\nabc\n::::::::::::::\nc/ghj.txt\n::::::\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,如果我是您,我不仅会生成 tar 文件,还会添加一些压缩 ( tar.gz) 并传输文件rsync,以便能够在传输错误时从停止点重新启动下载。

\n