bash基本上是新手,我想做的是解压缩文件,并在获取此新解压缩文件中的所有文件以循环通过它们之后不久。
由于我是bash的新手,所以我有点挣扎,而我发现这样做的最快方法是对压缩文件的名称进行硬编码。
由于我不想对更多变量进行硬编码,所以我想知道是否可以在运行解压缩命令后保存已解压缩文件的变量(没有.tar.gz时是相同的)。
COMP_FILE=$(ls data_compressed*)
tar zxf ${COMP_FILE}
FILE_LIST=$(ls $COMP_FILE)
echo $FILE_LIST
BASH相当新,因此可以随时进行纠正或指向可以学到更多知识的任何方向。
谢谢。
答案 0 :(得分:0)
可以使用%
运算符删除后缀,请参见man bash
:"${COMP_FILE%.tar.gz}"
当压缩包中的文件名中包含(空格字符)或其他特殊字符时,以下所有内容都会中断。
尝试一下:
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