私はフォルダ内のすべてのファイルを削除するコマンドを見つけようとしましたが、ファイルタイプの種類ではありませんでした。でも運が悪いようです。これまでに試したこと:
_set extended_glob
rm !(*.dmg)
# this returns zsh:number expected
rm ./^*.dmg
# this returns no matches found
_
私が使用しているzshのバージョンはzsh 5.0.2 (x86_64-Apple-darwin13.0.1)
です。
extended_glob
オプションは、zsh独自の拡張 glob構文 を提供します。
setopt extended_glob
rm -- ^*.dmg
rm -- ^*.(dmg|txt)
ksh_glob
取得するオプション ksh globs 。否定的なパターンがWordの最後のものである一般的なケースでは、zshが 括弧をグロブ修飾子として解析する であることに注意してください(kshエミュレーションモードではこれを行いません)。
setopt ksh_glob
rm -- !(*.dmg|*.txt)
setopt no_bare_glob_qual
rm -- !(*.dmg)
シェルの代わりにfind
を使用できます。
find . -mindepth 1 -maxdepth 1 ! -name "*.dmg" -delete
man find
から:
! expr True if expr is false. This character will also usually need
protection from interpretation by the Shell.
-name pattern
Base of file name (the path with the leading directories removed)
matches Shell pattern pattern.
-delete
Delete files; true if removal succeeded. If the removal failed,
an error message is issued. If -delete fails, find's exit status
will be nonzero (when it eventually exits). Use of -delete
automatically turns on the -depth option.
何らかの理由でfind
を使用できない場合は、zsh
(または他のシェル)を使用してこれを行う方法を次に示します。 zsh
はzsh
なので、おそらくもっと簡単な方法がありますが、私はbash
の人なので、これは私が思いついたものです。
for file in *; do if [[ ! "$file" == *.dmg ]]; then rm $file; fi; done
ファイルを削除する別の方法は、find
、xargs
およびrm
を使用することです。
find . -mindepth 1 -maxdepth 1 ! -name '*.dmg' -print0 | xargs -0 rm