这是我的循环
ls -ltrd * | head -n -3 | awk '{print $NF}' | while read y; do
rm -iR $y
done
输出:
rm:进入目录
oct_temp17
? rm:进入目录oct_temp18
? rm:进入目录oct_temp19
? ....
它不会提示用户确认,理想情况下,手动运行时应该执行 rm -i 。
我在 Linux 3.10 上使用 bash shell
我对 Unix/Linux 很幼稚。您能否建议我如何让脚本要求我确认 ls 输出中的每个文件夹?
答案1
1. 为什么你的例子没有按预期工作
rm
的提示需要 STDIN 才能接收您的反馈。在您的示例中,您使用 STDIN 将列表通过管道传输到while
循环,因此从//命令而不是用户rm
获取提示的答案。ls
head
awk
解决方案是不使用 STDIN 向循环提供列表 - 例如:
for y in $(ls -ltrd * | head -n -3 | awk '{print $NF}'); do
rm -iR $y
done
2. 更安全的方法
准备好包含空格的文件名(您不需要awk
,要获取文件名,您只需告诉ls
仅在第一个位置打印文件名):
IFS=
for y in $(ls -1qtrd * | head -n -3); do
rm -iR "$y"
done
3. 更简单的方法
正如Archemar 指出的:你甚至不需要循环(只要文件名中没有空格)。
rm -iR $(ls -1qtrd * | head -n -3)