J'ai essayé de find une command pour supprimer tous les files dans un dossier, mais pas une sorte de type de file. Mais je ne semble pas avoir de chance. Ce que j'ai essayé jusqu'à présent:
set extended_glob rm !(*.dmg) # this returns zsh:number expected rm ./^*.dmg # this returns no matches found
La version de zsh que j'utilise est zsh 5.0.2 (x86_64-apple-darwin13.0.1)
.
L'option extended_glob
vous donne la propre syntaxe globale de zsh.
setopt extended_glob rm -- ^*.dmg rm -- ^*.(dmg|txt)
Vous pouvez définir l'option ksh_glob
pour get des ksh_glob
ksh . Attention, dans le cas courant où le motif négatif est la dernière chose du mot, zsh peut parsingr les parenthèses comme des qualifiants glob (ce n'est pas le cas en mode d'émulation ksh).
setopt ksh_glob rm -- !(*.dmg|*.txt) setopt no_bare_glob_qual rm -- !(*.dmg)
Vous pouvez utiliser find
place de votre shell:
find . -mindepth 1 -maxdepth 1 ! -name "*.dmg" -delete
De l' 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.
Si vous ne pouvez pas utiliser la find
pour une raison quelconque, voici un moyen de le faire avec zsh
(ou d'autres coquilles). zsh
étant zsh
, il y a probablement un moyen plus simple de le faire mais comme je suis un type bash
voici ce que j'ai proposé:
for file in *; do if [[ ! "$file" == *.dmg ]]; then rm $file; fi; done
Une autre façon de supprimer des files est de find
, xargs
et rm
:
find . -mindepth 1 -maxdepth 1 ! -name '*.dmg' -print0 | xargs -0 rm