![xargs -0 rm をログに記録するにはどうすればよいですか?](https://rvso.com/image/76409/xargs%20-0%20rm%20%E3%82%92%E3%83%AD%E3%82%B0%E3%81%AB%E8%A8%98%E9%8C%B2%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
特定の拡張子のファイルを再帰的に検索して削除したいという単純なニーズがあります。そのため、ファイルを検索して削除し、 にパイプする構文がありますxargs -0 rm
が、削除されたファイルのログを作成できないようです。
これまでに私が持っているもの:
find /var/www/html -type f -regex ".*/.*\.(png|jpg)" -print0 |xargs -0 rm
答え1
rm
通常はファイルを削除するときに何も表示されません。削除されたファイルを示すログを作成したい場合は、-v
オプションを追加します。つまり、次の行を置き換えます。
xargs -0 rm
と:
xargs -0 rm -v >log
答え2
find
ファイルを削除し、同時にその名前を stdout に書き込むために、これを使用できます。
find /var/www/html -type f -regex ".*/.*\.\(png\|jpg\)" -delete -print >logfile
注記:-delete
オプションの順序は-print
重要です。2 番目のオプションは、最初のオプションが true を返した場合にのみ適用されます。つまり、最初の-delete
オプションがファイルを削除できなかった場合、その名前は stdout に出力されません。最初のオプションを指定すると、実際にファイルを削除できた-print
かどうかに関係なく、ファイル名が stdout に出力されます。-delete
注2: システムのユーティリティで正規表現をデフォルトで動作させるには、括弧と縦線をエスケープする必要がありましたfind
。代わりに、たとえば-regextype
を指定することもできます。とにかく、最初にオプションなしでコマンドを試して、ファイルが正しく見つかるかどうか確認するposix-egrep
価値はあります。find
-delete
find /var/www/html -type f -regex ".*/.*\.\(png\|jpg\)" -print