我正在尝试从包含其他文件列表的文件创建 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 时我遇到错误,有人可以帮助我吗?
您可以使用以下脚本来实现您的目标,如果有不清楚的地方请告诉我:
\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 $?\nRun 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\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n\n执行:
\n\n$ ./scriptTar.sh files-to-sync.in output.tar\nRun Code Online (Sandbox Code Playgroud)\n\ntar 文件内容:
\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\nRun 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 \nRun 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\ntar -tf output.tar\n./a/abc.txt\n./b/def.txt\n./c/ghj.txt\nRun Code Online (Sandbox Code Playgroud)\n\n提取内容:
\n\ntar xvf output.tar \n./a/abc.txt\n./b/def.txt\n./c/ghj.txt\nRun Code Online (Sandbox Code Playgroud)\n\n检查文件:
\n\nmore ?/*.txt\n::::::::::::::\na/abc.txt\n::::::::::::::\nabc\n::::::::::::::\nb/def.txt\n::::::::::::::\nabc\n::::::::::::::\nc/ghj.txt\n::::::\nRun Code Online (Sandbox Code Playgroud)\n\n但是,如果我是您,我不仅会生成 tar 文件,还会添加一些压缩 ( tar.gz) 并传输文件rsync,以便能够在传输错误时从停止点重新启动下载。