次のコマンドを使用して、サーバーから大量のメールを削除しようとしています。 (主にメールは送信されません。)
rm -rf /home/*/mail/new/*
私はますます-bash: /usr/bin/rm: Argument list too long
検索を試してみました。
find /home/*/mail/new/ -mindepth 1 -delete
しかし、20分が経っても何も起こらないようです。
forループを使用してその中のすべてのもの(ディレクトリ、ファイル、ドットファイル)を削除する方法/home/*/mail/new/
このような
for f in /home/*/mail/new/*.*~; do
# if it is a file, delete it
if [ -f $f ]
then
rm "$f"
fi
done
ファイルとフォルダ、およびその中のすべての内容を削除するには、このコマンドを再作成するのに役立ちます。/home/*/mail/new/
編集:私の質問はFORループ内でこれを行うという点でユニークです。
答え1
問題は、あまりにも/home/*/mail/new/*
多くのファイル名に拡張されることです。最も簡単な解決策は、ディレクトリを削除することです。
rm -rf /home/*/mail/new/
またはfind
コマンドを使用します。可能でなければなりませんが、遅くなります。
または、ディレクトリが必要な場合は、new
ループを使用してそのディレクトリを見つけて削除し、再作成します。
for d in /home/*/mail/new/; do
rm -rf "$d" && mkdir "$d"
done
作成したいループ(しかし使用しないでください。非常に遅くて非効率的です)は次のとおりです。
for f in /home/*/mail/new/* /home/*/mail/new/.*; do
rm -rf "$f"
done
すべてを削除するためにファイルをテストする必要はありません。rm -rf
同じコマンドを使用してディレクトリとファイルの両方を削除するだけです。削除できないと文句があります.
が..
無視できます。または、非常にきれいでエラーを回避するには、bashで次のことを実行できます。
shopt -s dotglob
for f in /home/*/mail/new/*; do
rm -rf "$f"
done