(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
我有一个脚本可以按路径清理一些文件夹。我已经尽可能地加强了它,但它仍然有 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