1

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

しかし、「不正な置換」というエラーが表示されます。

4

3 に答える 3

3

Linux の場合:

find .. -name "*.tex" | while read line; do
    rm -i "${line%%tex}aux" < /dev/tty
done

引数が 1 つの場合は使用する必要はありませんがxargs、ループ内で何らかの方法で元の tty にアクセスする必要があります。上記は Linux で動作しますが、おそらく他のシステムにも同様のトリックがあります。

これを行う別の (おそらくより移植性の高い) 方法はstdin、while ループに入る前に「保存」することです (他の目的で fd 9 を使用していないと仮定します):

exec 9<&0
find .. -name "*.tex" | while read line; do
    rm -i "${line%%tex}aux" <&9
done

2 つの違い: 最初のものは常に制御側から読み取ろうとします (失敗する可能性もあります) tty。もう 1 つはstdin、ループの外側にあるものから読み取ります。

于 2012-04-06T14:39:24.247 に答える
0

これを試して

OIFS="$IFS"
IFS='
'
declare -a ar=($(find . -name '*.tex'))
IFS="$OIFS"
for x in "${ar[@]}"
 do
  rm -i "${x%%tex}aux"
 done
于 2012-04-06T22:05:00.970 に答える
0

find絶対的な要件ではない場合は、単純なグロブに置き換えることができます:

for f in ../*.tex; do
    rm -i ${f%%tex}aux
done
于 2012-04-06T23:18:34.980 に答える