我试图弄清楚为什么以下 tar 命令不起作用 -
我尝试了以下两个版本,但都不起作用 -
版本 1
tar -c --use-compress-program=pigz -f /home/jhonst/data_lake/1m/UX.tar -C '/home/jhonst/data_lake/1m/*.UX.csv'
我看到的错误是
tar: Cowardly refusing to create an empty archive
Try 'tar --help' or 'tar --usage' for more information.
版本 2
tar -c --use-compress-program=pigz -f /home/jhonst/data_lake/1m/UX.tar -C '/home/jhonst/data_lake/1m/*.UX.csv' .
我看到的错误是
tar:
/home/jhonst/data_lake/1m/*.UX.csv: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now
请有人指导我我做错了什么
答案1
您的问题没有提供足够的细节来提供准确的答案(您的问题需要更具体,更详细,并包含更多关于您想要实现的目标的解释)但我想我明白了大概的意思。
tar 的参数-C
表示“更改到此选项后的目录”,但您并没有在选项后为其提供目录名,而是试图为其提供文件列表。
此外,您将通配符括在引号中,这意味着 shell 不会将其展开以匹配文件。(新手用户经常会感到困惑,尽管您使用 tar 命令来创建存档,但参数列表的处理实际上是由 shell 而不是 tar 命令完成的)。
最简单的方法是先更改到工作目录,然后运行 tar 命令。
在 shell 命令提示符下输入此命令应该可以解决问题(请注意没有引号):
cd /home/jhonst/data_lake/1m && tar -c --use-compress-program=pigz -f UX.tar *.UX.csv
如果您希望每个子目录中都有一个单独的存档(您的问题对此并不完全清楚),那么像这样的 bash 循环就可以起作用:
cd /home/johnst/lake_data
for d in *; do
cd $d && && tar -c --use-compress-program=pigz -f UX.tar *.UX.csv
cd /home/johnst/lake_data
done
如果你想要 tar 存档中的目录名称,那么你可以-f UX_${d}.tar
在 tar 命令中使用,而不是-f UX.tar