如何使此脚本搜索所有用户主文件夹,然后 rm -f 匹配 EXT 的文件?

如何使此脚本搜索所有用户主文件夹,然后 rm -f 匹配 EXT 的文件?

如何让这个脚本搜索所有用户的主文件夹,然后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”替换为您需要的内容。

相关内容