ファイルが多いそして特定のフォルダ内のサブフォルダはすべて削除したいのですが、X、Y、Zファイルは保持したいと思います。
次のような方法がありますか?
rm * | but NOT grep | X or Y or Z
答え1
rmを使用する代わりに使用する方が便利です。探す。このようなコマンドは、「file」というファイルを除くすべてのエントリを削除します。
find . \! -name 'file' -delete
多くのバージョンでワイルドカードと正規表現の一致をサポートできる必要があります。
findの出力をrmにパイプすることもできます。
find . \! -name '*pattern*' -print0 | xargs --null rm
答え2
zshを使用し、演算子をsetopt EXTENDED_GLOB
使用します~
(とは別に)
rm -- *~(x|y|z)
OR^
演算子(否定):
rm -- ^(x|y|z)
ただし、ファイルを別の場所に移動し、すべてを削除する必要があります。 Enterキーを早すぎるように指でスワイプする方がはるかに安全です。
答え3
最新バージョンのbashには、必要なextglob
操作を実行するための構文を提供するシェルオプションがあります(インストールしたバージョンにその機能があるかどうかを確認するには、「パス名の拡張」の下のマニュアルページを参照してください)。
$ shopt -s extglob # turn on extended globbing
$ rm !(X|Y|Z)
テストするには、まず、削除するファイルのリストが期待どおりに一致することを確認することをおrm
勧めします。echo
答え4
アーカイブしたいファイルを移動してください。 1つ上のステップに進み、フォルダを削除します。フォルダを再作成し、そのファイルを再度移動します。