使用空格将tar文件压缩到tar文件夹

时间:2011-08-29 12:21:40

标签: bash tar

我正在尝试创建一个bash脚本,它将逐个递归地tar所有文件夹。

但是,我有一个问题,因为某些文件夹名称有空格等。 所以它无法正常工作。

我有什么:

#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for i in $(ls ./2011)
do
    tar -zcvf "$i".tar.gz "$i"
done
IFS=$SAVEIFS

但问题出现了例如:

tar -zcvf St Patricks Day Bar Night.tar.gz St Patricks Day Bar Night

这些空间引起了问题,这有什么好办法?

4 个答案:

答案 0 :(得分:7)

在文件名和 bash文件名扩展周围使用双引号,而不是ls

#!/bin/bash
for i in ./*
do
    echo tar -zcvf "$i.tar.gz" "$i"
done

答案 1 :(得分:1)

ls ./2011 | while read i
do
    echo tar -zcvf "$i.tar.gz" "$i"
done

答案 2 :(得分:0)

反对

#!/bin/bash
ls ./2011 | while read i; do
do
    printf "%s***" tar -zcvf "$i.tar.gz" "$i"
done

?请注意,printf内容可用于查看参数之间的界限。

答案 3 :(得分:0)

问题不在于您的脚本(尽管可能存在问题 - 如果没有别的话,它比它需要的两个数量级更复杂)。问题是,在调用脚本时需要使用空格引用文件名。

yourscript "St. Patrick's Day Bar Night"

对于它的价值,反引号中的ls是多余的;只需改为for i in ./2011/*。据我所知,IFS的烦恼只是不必要,但也可能导致问题。