ディレクトリ内のすべてのファイルを削除する必要がありますが、それらの一部を除外します。たとえば、ファイルがあるディレクトリではa b c ... z、とを除くすべてを削除する必要がuありpます。これを行う簡単な方法はありますか?
ディレクトリ内のすべてのファイルを削除する必要がありますが、それらの一部を除外します。たとえば、ファイルがあるディレクトリではa b c ... z、とを除くすべてを削除する必要がuありpます。これを行う簡単な方法はありますか?
回答:
そのような場合に私がやることは、
rm *
それから私は押しCtrl+ X、*し展開する *すべての可視ファイル名に。
次に、リストから保持したい2つのファイルを削除して、最後にコマンドラインを実行します。
*は、拡張するファイルのリストが長くならない限りのみ機能すると思います。:-}
Ctrl+ Shift+ x+*
使用できます find
find . ! -name u ! -name p -maxdepth 1 -type f -delete
! 次の式を否定します-name ファイル名を指定します-maxdepth 1findプロセスを指定されたディレクトリのみfindに設定します(デフォルトではディレクトリをトラバースします)-type f ファイルのみを処理します(ディレクトリなどは処理しません)-delete ファイルを削除しますその後、findのmanページを見て条件を調整できます。
更新
-print代わりにを使用してコマンドをテストします-delete
find . ! -name u ! -name p -maxdepth 1 -type f -print-delete直後に置く.と災害になります(CWD内のすべてのファイルが削除されます)
find . -maxdepth 1 -type f -name '[^up]' -delete
find特にグロブするにはファイルが多すぎるとき、私の親友です
シンプル:
mv必要なファイルを上位ディレクトリに、rm次にディレクトリに、そしてmvそれらを戻します。
rmなしで-rはサブディレクトリは削除されません。
この答えに多少似ていますが、特別なオプションは必要ありませんが、私が知っている限り、(曖昧な)/ bin / shに似たシェル(bash、zsh、kshなど)によってサポートされる「古代の」機能
rm [^up]
rm [^up]*か?よく似たようなことをします。
検索せずにそれを行う:
ls | grep -v '(u|p)' | xargs rm
(編集:ここの他の場所のように、「u」と「v」は正規表現全体の汎用バージョンとして使用されています。明らかに、あまりにも多くのものと一致しないように正規表現を固定する必要があります。)
他の人が示唆しているように、あなたがこれの多くをするつもりなら、間違いなくスクリプトが欲しいでしょう。
-Eかegrep
uかp
grep -L (u|p)' * | xargs rmwhere -Lは、一致を含まないファイル名をリストすることを意味するようなものを考えています。
uかp、含む任意のファイルではありませんuかp。それは正しいです。を使用して修正できますegrep -v '^(u|p)$'
ls | grep -v 'vuze\|progs' | xargs rm -rf
find . -maxdepth 1 ! -name "u" ! -name "p" -type f -exec rm -rf {} \;
これにより、unixのuとpを除くすべてのファイルが削除されます。
完全な正規表現emacs、posix-awkまたはposix-extendedスタイルで(影響を受けるすべてのファイル名にまたがる)任意の複雑な除外パターンを指定することを好む人(find manページを参照)をお勧めします。それは除外uし、pこの例では、現在のディレクトリインチ これはスクリプトの場合に便利です。
find -regextype posix-awk ! -regex './(u|p)' -print0 | xargs -0 rm -rf
-regextype唯一のGNUバージョンで動作します
findGNU拡張機能であるディレクトリ(最初のパラメーター)を定義しないfind。同じことが-regextypeオプションに適用されます。さらに、コマンドはサブディレクトリ内のファイルも削除しますが、元の質問ではディレクトリ内のファイルについて明確に尋ねられます。