我正在尝试创建一个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
这些空间引起了问题,这有什么好办法?
答案 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
的烦恼只是不必要,但也可能导致问题。