我在for循环中有rm -i但是当我运行它时,会打印出问题(“你想删除吗?”但是不要停下来让我回答。
find .. -name "*.tex" | while read line; do
printf "${line%%tex}""aux" | xargs rm -i
done
我该如何解决这个问题?
此外,我最初尝试使用exec这样做
find ..-name "*.tex" -exec printf "${{}%%tex}""aux"\; | xargs rm -i
但我收到错误“错误替换”。
答案 0 :(得分:2)
在Linux上:
find .. -name "*.tex" | while read line; do
rm -i "${line%%tex}aux" < /dev/tty
done
如果您只有一个参数,则不需要使用xargs
,但是您确实需要在循环内部以某种方式访问原始tty。上面的工作在Linux上,在其他系统上可能有类似的技巧。
另一种(可能更便携)的方法是在进入while循环之前“保存”stdin
(假设你没有将fd 9用于其他目的):
exec 9<&0
find .. -name "*.tex" | while read line; do
rm -i "${line%%tex}aux" <&9
done
两者之间的区别:第一个将始终尝试(并且可能失败)从控制tty
读取。另一个将从循环外的stdin
读取。
答案 1 :(得分:0)
试试这个
OIFS="$IFS"
IFS='
'
declare -a ar=($(find . -name '*.tex'))
IFS="$OIFS"
for x in "${ar[@]}"
do
rm -i "${x%%tex}aux"
done
答案 2 :(得分:0)
如果find
不是绝对要求,可以用简单的glob替换它:
for f in ../*.tex; do
rm -i ${f%%tex}aux
done