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