ホームページ > php教程 > PHP开发 > Linuxでディレクトリ内の一部のファイルを除くすべてのファイルを削除する3つの方法

Linuxでディレクトリ内の一部のファイルを除くすべてのファイルを削除する3つの方法

高洛峰
リリース: 2016-11-16 09:35:49
オリジナル
1586 人が閲覧しました

場合によっては、ディレクトリ内のすべてのファイルを削除したり、一部の指定された種類 (指定された拡張子で終わる) を除くファイルを削除してディレクトリをクリーンアップする必要がある状況に遭遇することがあります。

この記事では、指定されたファイル拡張子を除くディレクトリ内のファイルを削除する方法、または rm、find、および globignore コマンドを使用して入力する方法を説明します。

先に進む前に、Linux の重要な概念である、当面の問題を解決できるファイル名パターン マッチングについて簡単に見てみましょう。

Linux では、シェル パターンは、ワイルドカードまたはメタ文字と呼ばれる次の特殊文字を含む文字列です:

* – 0 個以上の文字と一致します

? – 任意の 1 文字と一致します

[sequence] – 文字列内の任意の文字と一致します。シーケンス

[!sequence] – シーケンスにない任意の文字と一致します

ここでは、次の 3 つの可能なアプローチを検討します:

拡張パターン マッチング演算子を使用してファイルを削除する

さまざまな拡張パターン マッチング演算子を以下に示します。リストは、| で区切られた 1 つ以上のファイル名を含むリストです:

* (パターン リスト) – 指定されたパターンの 0 個以上の出現と一致します

?(パターン リスト) – 指定されたパターンの 0 または 1 つの出現と一致します

@(パターン リスト) – 指定されたパターンの 1 つ以上の一致と一致します

!(パターン リスト) – 指定された 1 つのパターンを除く一致と一致します

これらを使用するには、次のように extglob シェル オプションをオンにする必要があります:

# shopt -s extglob
ログイン後にコピー

1. 次のコマンドを入力して、ディレクトリ内の filename を除くすべてのファイルを削除します

$ rm -v !("filename")
ログイン後にコピー

Linuxでディレクトリ内の一部のファイルを除くすべてのファイルを削除する3つの方法

Linux では、filename1 と filename2 を除くすべてのファイルを削除します

$ rm -v !("filename1"|"filename2")
ログイン後にコピー

2.

Linux で一部のファイルを除くすべてのファイルを削除します Linuxでディレクトリ内の一部のファイルを除くすべてのファイルを削除する3つの方法

3. 次の例は、対話型モードで一部のファイルを除くすべてのファイルを削除する方法を示しています。次に、次の方法でディレクトリ内の .zip と .odt を除くすべてのファイルを削除できます。 ファイル内のすべてのファイルを削除するときに、削除されるファイルを表示します:

$ rm -i !(*.zip)
ログイン後にコピー

指定されたファイル拡張子を除くすべてのファイルを削除しますLinuxでディレクトリ内の一部のファイルを除くすべてのファイルを削除する3つの方法

必要なコマンドをすべて実行したら、次の方法を使用することもできます。 extglob シェル オプションをオフにします。

$ rm -v !(*.zip|*.odt)
ログイン後にコピー

Linux で find コマンドを使用してファイルを削除します

この方法では、以下に示すように、find コマンドの適切なオプションを使用するか、xargs コマンドでパイプを使用することができます。現在のディレクトリ内の .gz を除くすべてのファイルを削除します

$ shopt -u extglob
ログイン後にコピー
Linuxでディレクトリ内の一部のファイルを除くすべてのファイルを削除する3つの方法

find コマンド - .gz を除くすべてのファイルを削除します

6. パイプと xargs を使用して、上記の例を次のように変更できます。ファイルを削除する find および xargs コマンド

7. 次のコマンド ラインは、現在のディレクトリにある .gz、.odt、および .jpg を除くすべてのファイルを削除します。指定された拡張子ファイル

bash の GLOBIGNORE 変数を使用してファイルを削除します

ただし、この最後の方法は bash でのみ機能します。 GLOBIGNORE 変数には、パス名拡張関数で無視されるパターン (またはファイル名) のコロンで区切られたリストが格納されます。

Linuxでディレクトリ内の一部のファイルを除くすべてのファイルを削除する3つの方法この方法を使用するには、ファイルを削除するディレクトリに移動し、次のように GLOBIGNORE 変数を設定します:

$ find /directory/ -type f -not -name 'PATTERN' -delete 
$ find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm {} 
$ find /directory/ -type f -not -name 'PATTERN' -print0 | xargs -0 -I {} rm [options] {}
ログイン後にコピー

この場合、.odt、.iso、.txt を除くすべてのファイルが、カレントディレクトリが削除されます。

次に、次のコマンドを実行してこのディレクトリをクリアします:

$ find . -type f -not -name '*.gz' -delete
ログイン後にコピー

その後、GLOBIGNORE 変数を閉じます: Linuxでディレクトリ内の一部のファイルを除くすべてのファイルを削除する3つの方法

$ unset GLOBIGNORE
ログイン後にコピー

Linuxでディレクトリ内の一部のファイルを除くすべてのファイルを削除する3つの方法

使用 bash 变量 GLOBIGNORE 删除文件

注:为了理解上面的命令行采用的标识的意思,请参考我们在每一个插图中使用的命令对应的 man 手册。



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート