このスクリプトですべてのユーザーのホームフォルダを検索し、EXTに一致するrm -fファイルを検索するにはどうすればよいですか? [コピー]

このスクリプトですべてのユーザーのホームフォルダを検索し、EXTに一致するrm -fファイルを検索するにはどうすればよいですか? [コピー]

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

バッシュを使ってグローバルスターオプションあなたのために再帰的に:

EXT=csv             ## for example
shopt -s globstar failglob
rm -f /home/**/*."$EXT"

(すべてのユーザーのホームディレクトリが/ homeの下にあるとします)。また、failglob一致するファイルがない場合、rmコマンドは実行されないように設定しました。

より一般的には、シェルループを使用してユーザーのホームディレクトリを抽出できます。

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」を必要なものに置き換えてください。

関連情報