ディレクトリ内のすべてのファイルを削除する必要がありますが、それらの一部を除外します。たとえば、ファイルがあるディレクトリでは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 1
findプロセスを指定されたディレクトリのみ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 rm
where -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バージョンで動作します
find
GNU拡張機能であるディレクトリ(最初のパラメーター)を定義しないfind
。同じことが-regextype
オプションに適用されます。さらに、コマンドはサブディレクトリ内のファイルも削除しますが、元の質問ではディレクトリ内のファイルについて明確に尋ねられます。