(rm/xargs) 故意减慢每秒传递给命令的参数数量?

(rm/xargs) purposefully slowing down the number of arguments passed to a command per second?

我有一个脚本可以按路径清理一些文件夹。我已经尽可能地加强了它,但它仍然有 0.001% 的机会删除我不希望它删除的其他文件夹。这些各自的文件夹有很多文件,所以我会及时“捕捉”它并按Ctrl+C。

但是有一个问题,即使通过 rm -v 管道,命令仍然运行得太快,我看不出来

如何减慢速度?是通过管道传递的参数数量,还是 find 或 rm 命令本身?我需要大约每秒 10 次,不需要精确。

find 'xxxxxxx' -path "*xxxx/*xxxx" | sed -e 's/.*/"&"/' | xargs rm -rv

将它传送到 while read ... 循环而不是 xargs,然后在每个文件之前添加 0.1 秒的睡眠,相当于每秒约 10 个文件。

find 'xxxxxxx' -path "*xxxx/*xxxx" \
  | sed -e 's/.*/"&"/' \
  | while read file; do
      echo "Removing: $file"
      sleep 0.1
      rm -r "$file"
    done

可能更好的选择:因为你对特定目录感兴趣,你可以让 find 只匹配目录(使用 -type d),然后在每个目录之前暂停一会儿,如果没有中断,则立即删除所有文件。

# though you'd probably have to adjust the -path pattern
find 'xxxxxxx' -path "*xxxx/*xxxx" -type d \
  | sed -e 's/.*/"&"/' \
  | while read directory; do
      echo "About to remove directory: $directory"
      sleep 2
      rm -r "$directory"
    done