我有12位董事:
/home/imp/hpt/boxes/110.110.2.0/
/home/imp/hpt/boxes/115.115.16.0
/home/imp/hpt/boxes/1.154.10.0/
/home/imp/hpt/boxes/44.100.0.0/
/home/imp/hpt/boxes/46.1.100.0/
/home/imp/hpt/outbound/
/home/imp/hpt/outbound.002/
/home/imp/hpt/outbound.02c/
/home/imp/hpt/outbound.02e/
/home/imp/hpt/outbound.06e/
/home/imp/hpt/outbound.073/
/home/imp/hpt/outbound.38f/
我想删除每个目录中小于 5k 的文件。这些文件是*.mo?
*.tu?
*.we?
*.th?
*.fr?
*.sa?
*su?
从到 的?
数字0
9
我读过有关 的内容inotifywait
,想知道是否可以用它来实现这一目标。是否可以?
谢谢。
编辑:好的,这是inotifywait
我正在尝试编写的脚本.. 正如您所看到的,我并没有走得太远。
#!/bin/bash
dir1=/home/imp/hpt/boxes/110.110.2.0/
dir2=/home/imp/hpt/boxes/115.115.16.0/
dir3=/home/imp/hpt/boxes/1.54.10.0/
dir4=/home/imp/hpt/boxes/44.100.0.0/
dir5=/home/imp/hpt/boxes/46.1.100.0/
dir6=/home/imp/hpt/outbound/
dir7=/home/imp/hpt/outbound.002/
dir8=/home/imp/hpt/outbound.02c/
dir9=/home/imp/hpt/outbound.02e/
dir10=/home/imp/hpt/outbound.06e/
dir11=/home/imp/hpt/outbound.073/
dir12=/home/imp/hpt/outbound.38f/
inotifywait --daemon --outfile /home/imp/hpt/remove.log -m "$dir1" "$dir2" "$dir3" "$dir4" "$dir5" "$dir6" "$dir7" "$dir8" "$dir10" "$dir11" "$dir12" -e delete |
while read path action file; do
for name in "$dir1'" "$dir2" "$dir3" "$dir4" "$dir5" "$dir6" "$dir7" "$dir8" "$dir9" "$dir10" "$dir11" "$dir12"
有人可以帮我吗?
答案1
find . \( -name '*.mo[0-9]' -o -name '*.tu[0-9]' \) -size -5120c -delete
您也可以使用size -5k
,但find
会进行一些愚蠢的舍入,因此不太精确:
但请记住,大小会向上舍入到下一个单位(因此 1 字节文件与 -size -1M 不匹配)
答案2
inotify
并inotifywait
实时监视文件系统操作。您可以使用它们来捕获创建的文件,但它们无法帮助您查找已存在的文件。
我假设您想查找现有文件。使用 GNU find,可以使用正则表达式模式稍微压缩查找它们的表达式:
$ find -type f -size -5120c -regextype awk -regex ".*\.(mo|tu|we|th|fr|sa|su)[0-9]" -delete
(大小5120以字节为单位,根据需要调整。)