Bash 如何设置tar、gz和tar.gz文件的大小写?
我在这样的目录中有几个文件:Bash 如何设置tar、gz和tar.gz文件的大小写?,bash,gzip,tar,Bash,Gzip,Tar,我在这样的目录中有几个文件: xxx.tar.gz xxx.tar yyy.tar.gz yyy.tar zzz.txt.gz ... ... for file in (cat list.txt); do tar zxvf $file done 我有list.txt文件,如: xxx.tar.gz xxx.tar yyy.tar.gz yyy.tar zzz.txt.gz ... ... for file in (cat list.txt); do tar zxvf $file
xxx.tar.gz
xxx.tar
yyy.tar.gz
yyy.tar
zzz.txt.gz
...
...
for file in (cat list.txt); do
tar zxvf $file
done
我有list.txt文件,如:
xxx.tar.gz
xxx.tar
yyy.tar.gz
yyy.tar
zzz.txt.gz
...
...
for file in (cat list.txt); do
tar zxvf $file
done
list.txt:
/home/phe/xxx.tar.gz
/home/phe/xxx.tar
/home/phe/yyy.tar.gz
/home/phe/yyy.tar
/home/phe/zzz.txt.gz
...
...
我需要像这样提取这些文件:
xxx.tar.gz
xxx.tar
yyy.tar.gz
yyy.tar
zzz.txt.gz
...
...
for file in (cat list.txt); do
tar zxvf $file
done
如何在同一命令中打开tar.gz、txt.gz和tar文件?您可以这样做:
while IFS= read -r file; do
file="${file##*/}" # remove the directory
case $file in
*.tar.gz)
tar xzvf "$file"
;;
*.txt.gz)
gzip -d "$file"
;;
esac
done < list.txt
而IFS=read-r文件;做
file=“${file##*/}”删除目录
案例$file in
*.tar.gz)
tar xzvf“$file”
;;
*.txt.gz)
gzip-d“$file”
;;
以撒
完成
请注意,对于
tar
命令,我怀疑您需要使用-C
指定一些输出目录,因为否则所有内容都将在当前目录中提取。您可以执行以下操作:
while IFS= read -r file; do
file="${file##*/}" # remove the directory
case $file in
*.tar.gz)
tar xzvf "$file"
;;
*.txt.gz)
gzip -d "$file"
;;
esac
done < list.txt
而IFS=read-r文件;做
file=“${file##*/}”删除目录
案例$file in
*.tar.gz)
tar xzvf“$file”
;;
*.txt.gz)
gzip-d“$file”
;;
以撒
完成
请注意,对于
tar
命令,我怀疑您需要使用-C
指定一些输出目录,因为否则所有内容都将被提取到当前目录中。如果我正确理解了您的问题,并且.txt.gz
文件只是gzip压缩,那么.tar.gz
文件就是tarball,而.tar
文件只是tar存档,没有压缩,那么您可以执行以下操作:
while read -r file; do
tmp = "${file##*/}"
[ "${tmp:3:3}" = "txt" ] && gzip -dk "$file" ## remove k to delete original
[ "${tmp##.}" = "tar" ] && tar -xvf "$file"
[ "${tmp##.}" = "gz" ] && tar -xvzf "$file"
done <list.txt
读取-r文件时;做
tmp=“${file##*/}”
[“${tmp:3:3}”=“txt”]&&gzip-dk“$file”##删除k以删除原始文件
[“${tmp###.}”=“tar”]&&tar-xvf“$file”
[“${tmp###.}”=“gz”]&&tar-xvzf“$file”
完成如果我正确地阅读了您的问题,并且.txt.gz
文件只是gzip文件,.tar.gz
文件是tarball文件,.tar
文件只是tar归档文件,没有压缩,那么您可以执行以下操作:
while read -r file; do
tmp = "${file##*/}"
[ "${tmp:3:3}" = "txt" ] && gzip -dk "$file" ## remove k to delete original
[ "${tmp##.}" = "tar" ] && tar -xvf "$file"
[ "${tmp##.}" = "gz" ] && tar -xvzf "$file"
done <list.txt
读取-r文件时;做
tmp=“${file##*/}”
[“${tmp:3:3}”=“txt”]&&gzip-dk“$file”##删除k以删除原始文件
[“${tmp###.}”=“tar”]&&tar-xvf“$file”
[“${tmp###.}”=“gz”]&&tar-xvzf“$file”
读取-r文件时完成。;do[“${file##*.}”=“gz”]&&tar-xvzf“$file”;完成了tar-zxvf获取.tar和.gz文件的错误。请参阅更新的注释--现在我看到的是.txt文件,请稍候。同时读取-r文件;do[“${file##*.}”=“gz”]&&tar-xvzf“$file”;完成tar-zxvf获取.tar和.gz文件的错误。请查看更新的注释--更不用说我现在看到了.txt,请稍候修复错误!(也要使用更惯用的bash)。上面的可移植脚本是什么?哪些是非惯用的?你有没有试过你的脚本tmp=“${file##*/}”
:在=
周围的空格?真的吗<代码>${tmp:3:3}
:你知道那是干什么的吗?当然不是你需要的;嘿!它甚至不便于携带。怎么样${tmp}
?你真的认为tmp
有一个领先的
?如果是这样的话,你就不会使用。
,而是。
。为什么您甚至需要tmp
变量?为什么不使用一个可移植的case
语句呢?关于习语:在Bash中,要检查字符串是否以例如.txt
结尾,可以使用类似glob的[[[$string=*.txt]]
。空格问题是一个明显的疏忽,在帮助编写shell脚本的同时练习法律是一项挑战。:)
至于[[
,如果有需要bashism的功能(例如=~
),我使用[[
,否则,如果有POSIX可移植的方式来编写表达式,那就是我喜欢的。请修复您的错误!(并且也使用更惯用的bash)。上面的可移植脚本是什么,以及哪些是非惯用的?您甚至试过您的脚本吗?tmp=“${file}.*/}”
:周围的空格=
?认真地说吧?${tmp:3:3}
:你知道那是什么吗?当然不是你在这里需要的;嘿!它甚至不可移植。那${tmp}呢
?你真的认为tmp
有一个前导的
?如果是这样的话,你就不会使用#
而是#
。为什么你甚至需要tmp
变量?为什么不使用一个可移植的case
语句呢?关于习惯用法:在Bash中,检查字符串是否以例如.txt结尾
,你会使用一个类似于[[$string=*.txt]]
的glob。空格问题是一个明显的疏忽,在帮助编写shell脚本的同时练习法律是很有挑战性的:)
至于[
,如果需要bashism(例如=~
),我会使用[[
,否则,如果有POSIX可移植的方式来编写表达式,那就是我更喜欢的方式。