目录
需求
编写过程
演示
需求
大家在学习时可能会有一个自己的小目录,里面放着各种奇葩代码,有天突然发现,没有空间了,这时候发现遗留了很多的可执行文件,大大的浪费了我们的空间,但是由于层数深,数量多一个一个的删除很麻烦这时候我们的脚本就登场啦。
编写过程
#!/bin/bash
# 使用find命令查找所有名为a.out的文件,并使用-exec选项删除它们
find . -name "a.out" -type f -exec rm {} \;
echo "所有a.out文件已被删除。"
太单调了我想在打印时加上删除目标的目录
#!/bin/bash
# 使用find命令查找所有名为a.out的文件,并打印其绝对路径然后删除它们
find . -name "a.out" -type f -exec bash -c 'echo "正在删除: $0"; rm "$0"' {} \;
echo "所有a.out文件已被删除。"
我还想统计删除文件的数量
#!/bin/bash
# 初始化计数器
count=0
# 使用find命令查找所有名为a.out的文件,并打印其绝对路径然后删除它们
find . -name "a.out" -type f -exec bash -c 'echo "正在删除: $0"; rm "$0"' {} \; -print | while read file; do
# 对于每个找到的文件,增加计数器
((count++))
done
# 打印被删除的文件数量
echo "共删除了 ${count} 个 a.out 文件。"
我想递归的删除
#!/bin/bash
# 初始化计数器
count=0
# 使用find命令递归查找所有名为a.out的文件,并打印其绝对路径然后删除它们
find . -name "a.out" -type f -exec bash -c 'echo "正在删除: $1"; rm "$1"' -- {} \;
# 统计被删除的文件数量(使用find的-print和wc命令)
count=$(find . -name "a.out" -type f -delete | wc -l)
# 打印被删除的文件数量
echo "共删除了 ${count} 个 a.out 文件。"
成功删除了,但是有bug没有打印路径和统计信息
#!/bin/bash
# 初始化计数器
count=0
# 使用find命令递归查找所有名为a.out的文件,并打印其绝对路径然后删除它们
while IFS= read -r -d '' file; do
echo "正在删除: $file"
rm "$file"
((count++))
done < <(find . -name "a.out" -type f -print0)
# 打印被删除的文件数量
echo "共删除了 ${count} 个 a.out 文件。"
我想指定我要删除文件的名字
#!/bin/bash
# 初始化计数器
count=0
# 遍历传入的每个参数(文件名)
for filename in "$@"; do
# 使用find命令递归查找所有匹配的文件名,并打印其绝对路径然后删除它们
while IFS= read -r -d '' file; do
echo "正在删除: $file"
rm "$file"
((count++))
done < <(find . -name "$filename" -type f -print0)
done
# 打印被删除的文件数量
echo "共删除了 ${count} 个文件。"
演示
哦吼完美。