BASH:如何在文件名数组上执行rm?

时间:2016-01-29 07:29:48

标签: bash

原谅我的诺言。我有一个脚本,我想用来删除所有非英语.lproj文件。

if [ -f /var/mobile/Documents/Local\ Cookies/Clean ];    
then   
    echo "Last run: $(cat /var/mobile/Documents/Local\ Cookies/Clean) "    
else    
    echo "Hasn't been run yet "    
fi    
echo (grave)date(grave) > /var/mobile/Documents/Local\ Cookies/Clean   
sleep 1    
echo "Found files:"  
Lang=( $( find / -name "*.lproj" ! -name "en*" ! -name "En*" ! -name "Base*" ) )  
echo ${#Lang[@]}  
rm -r $Lang >/dev/null 2>&1  
echo "Finished cleaning language files."  
sleep 1  
echo "Found files:"  
iphone=($( find /  -name "*~iphone" ) )  
echo ${#iphone[@]}  
rm -r $iphone >/dev/null 2>&1  
echo "Finished cleaning iPhone files."

唯一的问题是我(作为初学者)不知道如何使用rm -r $...部分删除$ Lang和$ iphone数组中的文件。

3 个答案:

答案 0 :(得分:1)

尝试

rm -r ${Lang[@]} >/dev/null 2>&1  

rm -r ${iphone[@]} >/dev/null 2>&1  

编辑:// 我只是尝试过,你也可以使用正常的变量名称,如$ Lang,它也应该工作。你怎么了?你有错误吗?

答案 1 :(得分:1)

另一个建议是使用xargs命令结合find

Lang=( $( find / -name "*.lproj" ! -name "en*" ! -name "En*" ! -name "Base*" -type f | xargs rm -f) ) 

顺便说一句,您应该使用变量Lang来检查操作结果

if [ -z "${Lang}" ];then
    echo "all files removed"
fi

你应该做一些测试,以提高效率。

-rw-r--r-- 1 cg cg    0 Jan 29 03:16 test1.lproj                                                                                                                                                          
-rw-r--r-- 1 cg cg    0 Jan 29 03:16 test3.lproj                                                                                                                                                          
-rw-r--r-- 1 cg cg    0 Jan 29 03:16 test2.lproj                                                                                                                                                          
-rw-r--r-- 1 cg cg    0 Jan 29 03:16 test4.lproj                                                                                                                                                          
-rw-r--r-- 1 cg cg    0 Jan 29 03:16 test5.lproj                                                                                                                                                          
-rw-r--r-- 1 cg cg    0 Jan 29 03:16 testEn7.lproj                                                                                                                                                        
-rw-r--r-- 1 cg cg    0 Jan 29 03:16 test6.lproj                                                                                                                                                                                                                                                                                                                             
-rw-r--r-- 1 cg cg    0 Jan 29 03:16 testBas87.lproj                                                                                                          
-rwxrwxrwx 1 cg cg  229 Jan 29 03:16 test.sh  
> result
bash-4.3$ ./test.sh                                                                                                                                                                                       
start                                                                                                                                                                                                     
Lang[]                                                                                                                                                                                                    
all files removed                                                                                                                                                                                         
end                                                                                                                                                                                                       
bash-4.3$  
bash-4.3$ ls -ltr                                                                                                                                                                                         
total 12                                                                                                                                                                                                  
 -rwxrwxrwx 1 cg cg  229 Jan 29 03:16 test.sh                                                                                                                                                              

答案 2 :(得分:0)

要修复它,请替换

rm -r $Lang >/dev/null 2>&1 
rm -r $iphone >/dev/null 2>&1 

rm -r En* *.lproj en* *~iphone  >/dev/null 2>&1