使用tar后解压后的文件名

Name of the file decompressed after using tar

基本上是 bash 的新手,我想做的是解压缩一个文件,并在获取这个新解压缩文件中的所有文件后不久循环遍历它们。

因为我是 bash 的新手,我有点挣扎,我发现最快的方法是对压缩文件的名称进行硬编码。

因为我不想对更多变量进行硬编码,所以我想知道是否可以在 运行 解压命令之后保存解压文件的变量(没有 .tar.gz 也是一样) .

COMP_FILE=$(ls data_compressed*)
tar zxf ${COMP_FILE}
FILE_LIST=$(ls $COMP_FILE)
echo $FILE_LIST

BASH 还很陌生,所以请随时纠正或指出我可以了解更多信息的任何方向。

谢谢。

可以使用%运算符去掉后缀,见man bash"${COMP_FILE%.tar.gz}"

当压缩包中的文件名中有 </code>(space 字符)或其他特殊字符时,下面的所有内容都会中断。</p> <p>试试这个:</p> <pre><code>COMP_FILE=$(ls data_compressed*) tar zxf "${COMP_FILE}" FILE_LIST=$(ls "${COMP_FILE%.tar.gz}") cd "${COMP_FILE%.tar.gz}" for filename in ${FILE_LIST} ; do printf "Filename is %s\n" "${filename}" done

感谢 v,您可以想象在 tar 提取数据时循环遍历文件名:

for filename in $(tar xzvf data_compressed*) ; do
  printf "Filename is %s\n" "${filename}"
done