如何精简Bash解压函数:循环匹配扩展名动态输出命令
优化解压函数的精简思路求助
启动操作
我想要编写一个可通过.bash_functions调用的函数,该文件已在.bashrc中被加载。
目标
我希望减少代码量。如果编写包含重复命令(仅存在细微差异)的函数,最终会导致函数体积庞大……
函数用途
该函数将在当前工作目录中搜索与预定义扩展名数组匹配的文件。若找到匹配扩展名的文件,则执行对应的定制命令行;若找到其他扩展名的匹配文件,则执行另一种命令,以此类推。
当前工作目录示例文件
file1.7z file2.bz2 file3.gz file4.tgz file5.xz
执行函数后终端输出示例
7z x -o/root/file1 /root/file1.7z tar -xvfj /root/file2.bz2 -C /root/file2 tar -xvf /root/file3.gz -C /root/file3 tar -xvf /root/file4.tgz -C /root/file4 tar -xvf /root/file5.xz -C /root/file5
当前进展
我尚未设置扩展名数组,因为还在梳理正确的命令循环流程。我已有如下可实现需求的脚本,但希望尽可能精简代码,向各位学习技巧!
untar() { clear for i in *.* do local EXT="$(echo "${i}" | sed 's/.*\.//')" if [ -n "${EXT}" ]; then if [[ "${EXT}" == '7z' ]]; then if [ ! -d "${PWD}"/"${i%%.*}" ]; then mkdir -p "${PWD}"/"${i%%.*}"; fi echo 7z x -o"${PWD}"/"${i%%.*}" "${PWD}"/"${i}" elif [[ "${EXT}" == 'bz2' ]]; then if [ ! -d "${PWD}"/"${i%%.*}" ]; then mkdir -p "${PWD}"/"${i%%.*}"; fi echo tar -xvfj "${PWD}"/"${i}" -C "${PWD}"/"${i%%.*}" elif [[ "${EXT}" == 'gz' ]]; then if [ ! -d "${PWD}"/"${i%%.*}" ]; then mkdir -p "${PWD}"/"${i%%.*}"; fi echo tar -xvf "${PWD}"/"${i}" -C "${PWD}"/"${i%%.*}" elif [[ "${EXT}" == 'tgz' ]]; then if [ ! -d "${PWD}"/"${i%%.*}" ]; then mkdir -p "${PWD}"/"${i%%.*}"; fi echo tar -xvf "${PWD}"/"${i}" -C "${PWD}"/"${i%%.*}" elif [[ "${EXT}" == 'xz' ]]; then if [ ! -d "${PWD}"/"${i%%.*}" ]; then mkdir -p "${PWD}"/"${i%%.*}"; fi echo tar -xvf "${PWD}"/"${i}" -C "${PWD}"/"${i%%.*}" fi fi done; }
函数所需命令
本质上需要两种不同的tar命令和一种7z命令(目前我能想到的):
命令1:tar -xvf <target.{gz,tgz,xz}> -C <output folder> 命令2:tar -xvfj <target.bz2> -C <output folder> 命令3:7z x -o<output folder> <target.7z>
请问各位有什么可行的优化思路?
内容的提问来源于stack exchange,提问作者slyfox1186
相关产品推荐
相关产品推荐

