私は新しい 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 に注意してください。中国語のサイトです!