如何让这个脚本搜索所有用户的主文件夹,然后rm -f
搜索与 EXT 匹配的文件?现在它只是删除我正在执行脚本的当前文件夹中与 EXT 匹配的文件。
#!/bin/bash
EXT=jpg
for i in *; do
if [ "${i}" != "${i%.${EXT}}" ];then
echo "I do something with the file $i"
rm -f $i
fi
done
答案1
使用 bash 的全局星选项为你递归:
EXT=csv ## for example
shopt -s globstar failglob
rm -f /home/**/*."$EXT"
(假设所有用户的主目录都位于 /home 下)。我还设置了failglob
如果没有匹配的文件,rm
则不会运行该命令。
更一般地说,您可以使用 shell 循环提取用户的主目录:
shopt -s globstar failglob
for homedir in $(getent passwd | awk -F: '$3 >= 500 { print $6 }'|sort -u)
do
rm -f "$homedir"/**/*."$EXT"
done
这运行在假设您没有任何包含空格、制表符或换行符的用户主目录。
答案2
去测试:
find /home/ -name '*.txt' -exec ls -l {} \;
实际删除:
find /home/ -name '*.txt' -exec rm -f {} \;
当然,将“txt”替换为您需要的内容。