目录
需求
编写过程
演示
需求
大家在学习时可能会有一个自己的小目录,里面放着各种奇葩代码,有天突然发现,没有空间了,这时候发现遗留了很多的可执行文件,大大的浪费了我们的空间,但是由于层数深,数量多一个一个的删除很麻烦这时候我们的脚本就登场啦。
编写过程
#!/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} 个文件。"
演示
哦吼完美。