如何在 while read 循环中交互使用 rm?

问题描述 投票:0回答:3

我有点陷入用于查找和删除某些文件的脚本中。我想让用户有机会迭代列表并仅在人工批准后删除每个文件。

但是,我发现脚本跳过了用户交互并且不删除。

cat $fileToBeDeleted | while read in; do

    rm -i "$in"
    echo "deleted: $in"

done;
bash rm
3个回答
0
投票

尝试使用

rm
的完整路径进行 for 循环,例如:

#!/bin/bash

for i in ./*
  do  /bin/rm -i "$i"
done

0
投票

我怀疑“rm -i”输出询问是否删除文件的消息后, 它尝试从“stdin”读取用户的响应(“y”或“n”),其中(在中间) 脚本的)是脚本本身。尽管它实际上只需要一个字符 回复,“rm -i”似乎通读了脚本的整个剩余部分,以便 然后脚本提前终止。解决办法是告诉“rm -i”直接读取 从终端而不是从“stdin”:

       rm -i "$whatever" </dev/tty

-1
投票

您可以使用 if 语句在删除文件之前要求确认,而不是使用

rm -i
。在此示例中,我使用了一个文本文件 (to_delete_list.txt),其中包含我将要删除的文件列表。

read -u 1 answer
将让您在循环中请求用户输入。

#!/bin/bash
while IFS= read -r file; do
  echo "do you want to delete $file (y/n)?"
  read -u 1 answer
  if [[ $answer = y ]]
  then
        rm $file
        echo "deleted: $file"
  else
        continue
  fi
done < "to_delete_list.txt"
© www.soinside.com 2019 - 2024. All rights reserved.