ホームページ  >  記事  >  バックエンド開発  >  bash シェルを使用してディレクトリ内の特定のファイルを削除する 3 つの方法

bash シェルを使用してディレクトリ内の特定のファイルを削除する 3 つの方法

高洛峰
高洛峰オリジナル
2017-01-09 13:24:221880ブラウズ

私は新しい Linux ユーザーです。ここで、ダウンロード ディレクトリ内のファイルをクリーンアップする必要があります。実際には、次の形式のファイルを除く、~/Download/ フォルダー内のすべてのファイルを削除したいだけです:

1.*.iso - iso 内のすべてのファイル。フォーマット。
2.*.zip - すべてのファイルは zip 形式です。

Linux、OS X、または Unix 系システム上の bash シェルで特定のファイルを削除するにはどうすればよいですか?

Bash シェルは、次のような豊富なファイル パターン マッチング文字をサポートしています:

1.* - すべてのファイルに一致します。
2.? - ファイル名の 1 文字と一致します。
3.[...] - 括弧内の任意の文字と一致します。

戦略 1: 拡張パターン マッチング文字を使用する

ここでは、システムの組み込み shopt コマンドを使用して、シェルで extglob オプションを有効にする必要があります。そうすれば、これらの拡張パターン マッチング文字を使用できるようになります。

1.?(パターン リスト) – 指定されたパターンと 0 回または 1 回一致します。
2.*(パターン リスト) – 指定されたパターンと 0 回以上一致します。
3.+(パターンリスト) - 指定されたパターンと少なくとも 1 回一致します。
4.@(パターンリスト) - 指定されたパターンを 1 回照合します。
5.!(パターンリスト) - 指定されたパターンと一致しません。

パターンリストは、| で区切られた 1 つ以上のパターン (ファイル名) です。

最初に extgolb オプションをオンにします:

shopt -s extglob

Bash で .zip ファイルと .iso ファイルを除くすべてのファイルを削除します
rm コマンドの構文形式は次のとおりです:

## 仅保留 file1 文件 ##
rm  !(file1)
 
## 仅保留 file1 和 file2 文件## 
rm  !(file1|file2)
 
## 仅保留 zip 文件 ##
rm  !(*.zip)
 
## 仅保留 zip 和 iso 文件 ##
rm  !(*.zip|*.iso)
 
## 你也可以使用完整的目录 ##
rm /Users/vivek/!(*.zip|*.iso|*.mp3)
 
## 也可以传递参数 ##
rm [选项]  !(*.zip|*.iso)
rm -v  !(*.zip|*.iso)
rm -f  !(*.zip|*.iso)
rm -v -i  !(*.php)

戦略 #2: bash の GLOBIGNORE 変数を使用して、指定されたファイルを削除します

を除くすべてのファイル bash(1) マニュアル ページからの抜粋:

これは、パス拡張によって無視されるファイルのセットを定義するパターンのコロンで区切られたリストです。パス拡張パターンに一致するファイルが GLOBIGNORE のパターンにも一致する場合、そのファイルは一致リストから削除されます。

すべてのファイルを削除し、zip ファイルと iso ファイルのみを保持するには、GLOBIGNORE を次のように設定する必要があります:

## 只在 BASH 中可行 ##
cd ~/Downloads/
GLOBIGNORE=*.zip:*.iso
rm -v *
unset GLOBIGNORE

戦略 #3: find コマンドを使用して、他のすべてのファイルを削除し、zip ファイルと iso ファイルのみを保持します

tcsh/csh/sh/ksh またはその他のシェルを使用している場合、Unix 系システムでは次の find コマンド構文を使用してファイルの削除を試みることができます:

find /dir/ -type f -not -name '匹配模式' -delete

または

## 对于怪异的文件名可以使用 xargs ##
find /dir/ -type f -not -name '匹配模式' -print0 | xargs -0 -I {} rm {}
find /dir/ -type f -not -name '匹配模式' -print0 | xargs -0 -I {} rm [选项] {}

~/source 内の php 以外のファイルを削除したい場合ディレクトリに次のように入力します:

find ~/sources/ -type f -not -name '*.php' -delete

または

find ~/sources/ -type f -not -name '*.php' -print0 | xargs -0 -I {} rm -v {}

*.zip および *.iso ファイルのみを保持する構文は次のとおりです:

find . -type f -not \( -name '*zip' -or -name '*iso' \) -delete


特定のファイルの削除に関連するその他のシェル記事については、PHP に注意してください。中国語のサイトです!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。