BASH:如何在文件名数组上执行rm?
原谅我的愚蠢。我有一个脚本,我想用它删除所有非英语的.lproj文件BASH:如何在文件名数组上执行rm?,bash,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(grav
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阵列上的文件。试试看
rm -r ${Lang[@]} >/dev/null 2>&1
及
编辑://
我刚刚试过,你也可以使用普通的变量名,比如$Lang,它应该也能工作。你有什么问题?是否有错误?若要修复错误,请更换
rm -r $Lang >/dev/null 2>&1
rm -r $iphone >/dev/null 2>&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
我得到了一个常数“48”和“2”,我假设它正在查找的文件的数字不明确,但没有删除。这些值来自echo${#Lang[@]},我不知道你想用这个命令显示什么:D列出找到的文件?->拆下#。当前命令显示字符串的长度。另外,您的find命令是错误的。删除括号并将其更改为Lang=$(find/-name.lproj”!-name“en”!-name“en*”!-name“Base*”)您是否尝试过此方法?我假设只在名称前面加一个“!”不会删除这些文件名?
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