我必须提取当前文件夹中的所有档案。我正在做的只是提取所有正确命名但存档可能有任何混乱的扩展名。
file.tar.gvz
或file.tar.potatogz
或file.sss.faz
gunzip *.tar.gz >/dev/null 2>/dev/null
echo $?
echo "gzip"
tar -xvf *.tar >/dev/null 2>/dev/null
echo $?
echo "tar"
unzip '*.zip' >/dev/null 2>/dev/null
echo $?
echo "zip"
编辑: 文件命令似乎是正确的方法,但我不能让它在嵌套循环中工作。当在目录循环之外时,它可以正常工作。
for D in *; do
if [ -d "${D}" ]; then
cd $D
bool=false
for files in *
do
type=$( file -b $files | awk '{printf $1;}' )
echo "next is type"
echo $type
done
cd..
done
答案 0 :(得分:1)
File命令解决了这个问题。 我的文件问题用引号解决了。
type=$( file -b "$j" | awk '{printf $1;}' )
答案 1 :(得分:1)
当gunzip从stdin读取时,它不知道文件名错误:
cat archive_with_wrong_name | gunzip -c
甚至更容易......
gunzip -c <archive_with_wrong_name
甚至更容易......
gzcat archive_with_wrong_name
答案 2 :(得分:0)
看起来你真的很亲密。这样的事情怎么样?
for D in *; do
if [ -d "${D}" ]; then
cd $D
for file in *; do
type="$( file -b "$file" | awk '{print $1}' )"
case "$type" in
'gzip' ) gunzip $file; continue ;;
'zip' ) unzip $file; continue ;;
'tar' ) tar xzf $file; continue ;;
'*' ) continue ;;
esac
done
cd ..
fi
done