bashでファイル名の半角処理についての質問です


macのbashでのコマンド処理についての質問です。  
フォルダ内にある末尾がzip以外のモノを削除するようにしたいのですが、ファイル・フォルダ名に空白がある場合、うまく処理してくれません。解決するにはどうすればいいでしょうか。  
宜しくお願い致します。

`ls | grep -v -E 'zip$' | xargs rm -r`




`xargs`(1)
のデフォルトは標準入力をそのまま指定したコマンドに渡すのではなく、空白文字で分けたり、ダブルクォートやバックスラッシュでエスケープしたり、色々解釈します。詳しくはマニュアルなどをどうぞ。よって、そのような特別な文字を含む入力を与える場合は工夫が必要です。よくわからない、理解したくないというなら
`xargs`(1) は危険なので使わないことを推奨します。

ファイルの名前や種類を条件に絞り込み一定の処理をしたい場合は `find`(1) をお薦めします:

[code]

    $ find /path/to/dir -type f ! -name '*.zip' -delete
    
[/code]

フォルダが空になったら削除したいなら:

[code]

    $ find /path/to/dir -type f -name '*.zip' -delete -o -type d -empty -delete
    
[/code]

挙げられているコマンドライン例のように特定フォルダ直下の `*.zip` 以外のファイルを削除するなら:

[code]

    $ find /path/to/dir -maxdepth 1 -type f ! -name '*.zip' -delete
    
[/code]




`xargs`(1)
のデフォルトは標準入力をそのまま指定したコマンドに渡すのではなく、空白文字で分けたり、ダブルクォートやバックスラッシュでエスケープしたり、色々解釈します。詳しくはマニュアルなどをどうぞ。よって、そのような特別な文字を含む入力を与える場合は工夫が必要です。よくわからない、理解したくないというなら
`xargs`(1) は危険なので使わないことを推奨します。

ファイルの名前や種類を条件に絞り込み一定の処理をしたい場合は `find`(1) をお薦めします:

[code]

    $ find /path/to/dir -type f ! -name '*.zip' -delete
    
[/code]

フォルダが空になったら削除したいなら:

[code]

    $ find /path/to/dir -type f -name '*.zip' -delete -o -type d -empty -delete
    
[/code]

挙げられているコマンドライン例のように特定フォルダ直下の `*.zip` 以外のファイルを削除するなら:

[code]

    $ find /path/to/dir -maxdepth 1 -type f ! -name '*.zip' -delete
    
[/code]

