2つ以上のサブディレクトリ内のすべてのファイルを削除しようとしていますが、zsh
ディレクトリが空の場合、次のディレクトリは無視され、ファイルは保持されます。
例:
$ mkdir dir1
$ mkdir dir2
$ touch dir2/blah
# avoid the zsh safety prompt; this may not be necessary for this
# example, just for ease of use here
$ setopt rm_star_silent
$ rm -r dir1/* dir2/*
zsh: no matches found: dir1/*
$ ls dir2
blah
rm
Bashでは、すでに空のディレクトリが進行を中断することなくdir2
削除さdir2/blah
れます。
この関数とは何ですか? のように動作させるzsh
方法はありますか?rm
bash
ベストアンサー1
bash
とは異なり、zsh
デフォルトではファイル名生成パターンと一致するものがない場合はエラーが報告されます。この動作は、全体的に、またはモードごとに変更できます。
NULL_GLOB
グローバルな不一致パターンによるエラーメッセージを防ぐには、次のいずれかのオプションを設定できますCSH_NULL_GLOB
。
setopt nullglob
パターンに一致するものがない場合は、パラメータリストから削除されます。エラーメッセージは印刷されません。あなたの例では
rm dir1/* dir2/*
ただ拡張されます
rm dir2/blah
setopt cshnullglob
また、一致しないパターンを削除し、一致するパターンがない場合はエラーメッセージを出力しません。
単一パターンのエラーメッセージを回避するには、このパターンに対してオプションが有効になっているかのN
ように動作するglob修飾子を使用できます。NULL_GLOB
rm dir1/*(N) dir2/*(N)
これは次のように拡張される予定です。
rm dir2/blah